使用Python通过Gmail发送邮件

3
我尝试使用Python从Gmail发送邮件,可以正常工作。但问题是,当我创建具有一种方法的Mail类并从代码中发送特定字符串时,无法发送。
class Mail:
   def send_mail(self, msg):
      import smtplib  

      fromaddr = 'something@something.com'  
      toaddrs  = 'something@gmail.com' 
      msg = msg + "something"

      print msg

      username = 'something'  
      password = 'something'  


      server = smtplib.SMTP('smtp.gmail.com:587')  
      server.starttls()  
      server.login(username,password)  
      server.sendmail(fromaddr, toaddrs, msg)  
      server.quit()  

这种方式可以发送邮件,但是邮件中只有我添加的“something”这个字符串,而print msg输出了整个字符串加上“something”。可能出了什么问题?

现在这是整个类,它被称为:

     mail = Mail()
     mail.send_mail(message)

你看到了什么异常?我得到了smtplib.SMTPAuthenticationError - mvanveen
没有例外,我在这里更改了凭据;) 这就是为什么你会得到它。邮件已发送,但邮件中只有“something”,没有我传递给函数的'msg'。 - iblazevic
我正在使用自己的Gmail凭据运行它,但感觉有些奇怪。在无法执行或查看类的其余部分的情况下,它对我来说读起来是正确的,你尝试过其他方式连接字符串吗?例如''.join((msg, 'something')) - mvanveen
我不需要连接,我只是为了测试把它放在那里。我只需要发送那个消息字符串,但我不能在函数内部打印它,这很奇怪。 - iblazevic
没有看到你的类,很难知道发生了什么。你是如何调用这个方法的? - mvanveen
我稍微编辑了一下问题。 - iblazevic
2个回答

4

我不知道问题出在哪里,但是我成功地使用了Python中已经有的MIME来发送它。

以下是可行的代码:

def send_mail(self, message):

    import smtplib
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEText import MIMEText

    gmailUser = 'something@gmail.com'
    gmailPassword = 'something'
    recipient = 'something@something.com'

    msg = MIMEMultipart()
    msg['From'] = gmailUser
    msg['To'] = recipient
    msg['Subject'] = "Subject"
    msg.attach(MIMEText(message))

    mailServer = smtplib.SMTP('smtp.gmail.com', 587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(gmailUser, gmailPassword)
    mailServer.sendmail(gmailUser, recipient, msg.as_string())
    mailServer.close()

请问如果我需要将同一封邮件发送给多个人,应该如何操作呢? - Alok Agarwal

0
问题很可能是消息内容似乎需要在地址和消息正文之间添加额外的换行符。不过,iblazevic提供的解决方案无论如何都更易读。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接