【问题标题】:Sending email subject in Python在 Python 中发送电子邮件主题
【发布时间】:2012-06-02 05:44:22
【问题描述】:

当我的程序发送电子邮件时,我无法显示我的电子邮件的主题部分。我以为我在遵循 SMTP 的 RFC 规范。但我似乎无法弄清楚我做错了什么。非常感谢任何帮助。

def email():

    sender = 'username@domain.com'
    receivers = ['username@domain.com']

    message = """From: From Admin <admin@domain.com>
    To:To Person <user@domain.com>
    Subject: Important Information

    This is a test email message.
    """ 
    try:
        smtpObj = smtplib.SMTP('domain.com', 25)
        smtpObj.sendmail(sender, receivers, message)
        print "Successfully sent email"
    except smtplib.SMTPException:
        print('Error: unable to send email')

【问题讨论】:

  • 您得到什么错误或意外结果?
  • (没有主题)在电子邮件的主题中.. 我不明白为什么即使我在我正在创建的电子邮件中给它一个主题
  • 您的标题需要用 \r\n 分隔。
  • @jordanm - 这不应该是问题smtplib takes care of that。为了避免在创建电子邮件时出错,最好使用 [email](docs.python.org/library/email) 模块。
  • 收到的消息中的标头看起来如何?主题行是否存在,是否消失了,是否以某种方式损坏?

标签: python email python-3.x smtp smtplib


【解决方案1】:

不确定您的代码有什么问题。

FWIW,我过去曾使用 string.join 创建我的消息正文:

def send_email():
    import string,smtplib

    SMTPserver = "smtp.com"
    # To is a comma-separated list
    To = "sender@domain.com"
    From = "receipient@domain.com"
    Subj = "test subject"
    Text = """test email.
    Not sure what the problem is
    Multi-line anyway."""

    Body = string.join((
        "From: %s" % From,
        "To: %s" % To,
        "Subject: %s" % Subj,
        "",
        Text,
        ), "\r\n")

    s = smtplib.SMTP(SMTPserver)
    s.sendmail(From,[To],Body)

    s.quit()

-J

【讨论】:

    【解决方案2】:

    试试http://docs.python.org/library/email-examples.html的例子 或者试试我的示例代码。我不需要 from 标头,但我想您可以根据需要添加它。

    import smtplib
    
    USER_NAME = 'username@domain.com'
    PASSWORD = getpass.getpass("%s's PASSWORD: " % USER_NAME)
    DEBUG = True
    MESSAGE_FORMAT = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n%s" # %(fromAddr,to,subject,text)
    
    def sendEmail(recipient,message):
        SMTP_SERVER_URL = 'smtp.gmail.com'
        mailserver = smtplib.SMTP(SMTP_SERVER_URL)
        if DEBUG: 
            mailserver.set_debuglevel(1)
            mailserver.ehlo()
            mailserver.starttls()
            mailserver.ehlo()
        mailserver.login(USER_NAME,PASSWORD)
        mailserver.sendmail('', recipient, message)
        mailserver.close()
    
    def sendEmailWithFields(to,subject,text):
        message = MESSAGE_FORMAT%('', to, subject, text)
        sendEmail(to,message)
    
    if __name__ == '__main__':
        to = 'receipient@domain.com'
        subject = 'The subject'
        text = 'The text body'
        sendEmailWithFields(to,subject,text)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2015-04-29
      • 2022-10-13
      • 2017-12-26
      • 2017-10-03
      • 2012-12-12
      • 2023-03-27
      相关资源
      最近更新 更多