SMTP邮件发送给多个收件人,但不接受它

问题描述:

我已经写了一个Python脚本来自动发送一些信息给我的朋友。我使用SMTPlib,如果我只发送给我或另外添加另一封邮件,效果很好。SMTP邮件发送给多个收件人,但不接受它

当我尝试通过脚本发送到电子邮件17(包括我的发送者电子邮件),在网络基础的Gmail,然后我检查发送的邮件时,我看到的邮件已发送,但我没有收到。 只有第一个接收者收到该邮件。 如果我从邮件全部答复,大家只拿到了该答复。

我无法弄清楚他们为什么不接受它,当我从剧本送,我问我的垃圾邮件的朋友检查,但她并没有发现任何东西。

这是我的代码:

#!/usr/bin/env python 
import smtplib 
import csv 
from datetime import datetime, timedelta 

SMTP_SERVER = 'smtp.gmail.com' 
SMTP_PORT = 587 

sender = '[email protected]' 

password = None 
with open('pass', 'rt') as f: 
    password = f.read().strip('\n') 


def send_mail(recipient, subject, body): 
    """ 
    Send happy bithday mail 
    """ 
    headers = ["From: " + sender, 
       "Subject: " + subject, 
       "To: " + recipient, 
       "MIME-Version: 1.0", 
       "Content-Type: text/html"] 

    headers = "\r\n".join(headers) 

    smtp = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) 
    smtp.ehlo() 
    smtp.starttls() 
    smtp.ehlo 
    smtp.login(sender, password) 

    body = "" + body +"" 
    smtp.sendmail(sender, recipient, headers + "\r\n\r\n" + body) 
    print "Sent to ", 
    print recipient 

    smtp.quit() 

def send_happybirthday(recipient): 
    body = """Happy birthday to you! 
      \n<br/>From C2k8pro with love 
      """ 
    subject ='[BirthReminder] Happy birthday to you! from C2k8pro' 
    send_mail(recipient, subject, body) 


def send_notification(all_mails, names): 
    body = """Tomorrow is birthday of %s""" % names 
    send_mail(all_mails, body, body) 

def test_send_mail(): 

    notify_body = """Tomorrow is birthday of """ 
    recipients = ['[email protected]'] 

    today = datetime.now() 
    format = "%d-%m-%Y" 
    print today 
    today_in_str = datetime.strftime(today, format) 


def read_csv(): 
    FILENAME = 'mails.csv' 
    reader = csv.reader(open(FILENAME, 'rt'), delimiter=',') 

    today = datetime.now() 
    one_day = timedelta(days=1) 
    tomorrow = today + one_day 

    all_mails = [] 
    str_format = "%d/%m" 
    str_today = today.strftime(str_format) 
    str_tomorrow = tomorrow.strftime(str_format) 

    print 'Today is ', str_today 
    tomorrow_birth = [] 
    for row in reader: 
     name = row[1].strip() 
     dob = row[2] 
     dmy = dob.split("/") 
     mail = row[3] 
     all_mails.append(mail) 

     #TODO fix dob with only 1 digit 
     birth_date = dmy[0] + "/" + dmy[1] 
     if str_today == birth_date: 
      print 'Happy birthday %s' % name 

      try: 
       send_happybirthday(mail) 
      except Exception, e: 
       print e 

     elif str_tomorrow == birth_date: 
      tomorrow_birth.append(name) 
      print "Tomorrow is %s's birthday" % name 

    # Remove empty string 
    all_mails = filter(None, all_mails) 
    print 'All mails: ', len(all_mails) 
    str_all_mails = ', '.join(all_mails) 

    if tomorrow_birth: 
     all_tomorrow = ', '.join(tomorrow_birth) 
     send_notification(str_all_mails, all_tomorrow) 


def main(): 
    read_csv() 

if __name__ == "__main__": 
    main() 

谁能解释这一点。谢谢!

+0

能否请您提供您的代码? – Max 2012-07-31 17:15:47

+0

也许我从这里找到了解决方案: http://*.com/questions/6941811/send-email-to-multiple-recipients-from-txt-file-with-python-smtplib 我将相同的字符串传递给msg [“为”]与sendmail(FROM_EMAIL,电子邮件,msg.as_string()) – HVNSweeting 2012-07-31 17:21:03

+0

Downvote:问题是不可能的,没有看到代码或错误消息的办法。 – jforberg 2012-07-31 17:24:45

我发现溶液从这里

Send Email to multiple recipients from .txt file with Python smtplib

我通过一个字符串包含()由逗号分隔味精[“为”]与sendmail所有收件人。 msg ['To']的确如此,但使用sendmail时,我必须使用列表。