简体   繁体   中英

Python send simple mail

Im trying to write a simple script which has to send a simple email in some cases. I have the following script which works well if im using just only this script.

import smtplib

mail_user = '123@123.com'
mail_password = 'password'

sent_from = mail_user
to = ['reciever@address.com']
subject = 'My subject'
body = 'Hello mail.'

email_text = """\
From: %s
To: %s
Subject: %s

%s
""" % (sent_from, ", ".join(to), subject, body)

try:
    server = smtplib.SMTP_SSL('mail.123.com', 465)
    server.ehlo()
    server.login(mail_user, mail_password)
    server.sendmail(sent_from, to, email_text)
    server.close()

    print 'Email sent!'
except:
    print 'Something went wrong...'

The problem is when im trying to put this code into a def and call from outside the e-mail is missing headers, i mean the email is arriving without sender and without subject. Sender empty and subject empty, but i have only the body. I also can not get the mail when im sending to another domain, but i think this is because the another domain is rejecting the mail without headers, when using only the script the mail arrives also to other domains.

import smtplib

def sendMail():

  mail_user = '123@123.com'
  mail_password = 'password'

  sent_from = mail_user
  to = ['reciever@address.com']
  subject = 'My subject'
  body = 'Hello mail.'

  email_text = """\
  From: %s
  To: %s
  Subject: %s

  %s
  """ % (sent_from, ", ".join(to), subject, body)

  try:
    server = smtplib.SMTP_SSL('mail.123.com', 465)
    server.ehlo()
    server.login(mail_user, mail_password)
    server.sendmail(sent_from, to, email_text)
    server.close()

    print 'Email sent!'
  except:
    print 'Something went wrong...'

sendMail();

What is the diffenerece when i put this code into a def? Why this happening? What im doing wrong?

Thanks for help.

In your function version, your email headers have become indented

email_text = """\
  From: %s
  To: %s
  Subject: %s

  %s
  ...

In this string, the To: and Subject: are now indented.

def sendMail():

call it with:

sendMail()

not SendMail()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM