使用函数通过python发送Gmail

使用函数通过python发送Gmail,python,gmail,smtplib,Python,Gmail,Smtplib,下面是两个代码块。第一个将向gmail发送带有正确主题和发件人的消息。但是,当我将第一个代码放入函数时,电子邮件会丢失发件人和主题信息 这是为什么?我该如何修复它 我希望能够从其他python脚本调用此函数,以便在我的工作完成时通知我。该功能可以正常工作并运行,邮件会发送到我的收件箱,但我会丢失发件人信息,更重要的是,主题标题 第一个按预期运行的代码: import smtplib gmail_user = 'name@domain.com' gmail_password = 'passw

下面是两个代码块。第一个将向gmail发送带有正确主题和发件人的消息。但是,当我将第一个代码放入函数时,电子邮件会丢失发件人和主题信息

这是为什么?我该如何修复它

我希望能够从其他python脚本调用此函数,以便在我的工作完成时通知我。该功能可以正常工作并运行,邮件会发送到我的收件箱,但我会丢失发件人信息,更重要的是,主题标题

第一个按预期运行的代码:

import smtplib

gmail_user = 'name@domain.com'  
gmail_password = 'password'

sent_from = gmail_user
to = ['recipient@domain.com'] 
subject = "job complete" 
body = "python script " + str(name) + " has finished"

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

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

server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(gmail_user, gmail_password)
server.sendmail(sent_from, to, email_text)
server.close()
丢失主题和发件人信息的第二个代码:

def mailer(subject, body):
    import smtplib

    gmail_user = 'name@domain.com'  
    gmail_password = 'password'

    sent_from = gmail_user
    to = ['recipient@domain.com'] 
    subject = subject 
    body = body

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

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

    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    server.sendmail(sent_from, to, email_text)
    server.close()

subject = "job complete"
body = "python script " + str(name) + " has finished"

mailer(subject, body)

这很可能是一个行尾问题。每个邮件头都必须以CRLF结尾\r\n。原始消息字符串可能包含编辑器中不可见的正确结尾,这些结尾随后在复制/粘贴到函数版本时丢失。为确保每一行的结尾正确,请尝试将每一行表示为单独的字符串,并用\r\n连接它们


在你的第二个代码中,你为什么要这样做:主题=主题,身体=身体?这应该是多余的
email_text = '\r\n'.join([
    'From: %s' % sent_from,
    'To: %s' % ', '.join(to),
    'Subject: %s' % subject',
    '',  # Blank line to signal end of headers
    body
])