电子邮件多收件人Python

2024-06-02 15:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用下面的pyton脚本向多个收件人发送电子邮件。我已经在论坛上搜索了答案,但是没有能够正确地实现其中的任何一个。如果有人有时间回顾我的脚本并发现/解决问题,我们将不胜感激。

这是我的脚本,我发现我的问题在“sendmail”部分,但无法找到解决方法:

gmail_user = "sender@email.com"
gmail_pwd = "sender_password"
recipients = ['recipient1@email.com','recipient2@email.com']

def mail(to, subject, text, attach):
   msg = MIMEMultipart()
   msg['From'] = gmail_user
   msg['To'] = ", ".join(recipients)
   msg['Subject'] = subject

   msg.attach(MIMEText(text))

   part = MIMEBase('application', 'octet-stream')
   part.set_payload(open(attach, 'rb').read())
   Encoders.encode_base64(part)
   part.add_header('Content-Disposition',
           'attachment; filename="%s"' % os.path.basename(attach))
   msg.attach(part)

   mailServer = smtplib.SMTP("smtp.gmail.com", 587)
   mailServer.ehlo()
   mailServer.starttls()
   mailServer.ehlo()
   mailServer.login(gmail_user, gmail_pwd)
   mailServer.sendmail(gmail_user, to, msg.as_string())
   mailServer.close()

mail("recipient1@email.com, recipient2@email.com",
   "Subject",
   "Message",
   "attchachment")

任何洞察都将不胜感激。

最好的

马特


Tags: 脚本comemailpwdmsggmailsendersendmail
3条回答

应该更像

mail(["recipient1@email.com", "recipient2@email.com"],
   "Subject",
   "Message", 
   "attchachment")

您已经声明了一个收件人数组,这也是全局性的,您可以使用它而不将其作为参数传递给mail

我面临着同样的问题,我现在就解决了这个问题。这是我的密码-

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import datetime

def sendMail():
    message = MIMEMultipart()   
    message["To"] = "xxxxx@xxxx.com,yyyy@yyyy.com"
    message["Cc"] = "zzzzzz@gmail.com,*********@gmail.com"
    message["From"] = "xxxxxxxx@gmail.com"
    message["Password"] = "***************"
    server = 'smtp.gmail.com:587'

    try:
        now = datetime.datetime.now()
        message['Subject'] = "cxxdRL Table status (Super Important Message) - "+str(now)
        server = smtplib.SMTP(server)
        server.ehlo()
        server.starttls()
        server.login(message["From"], message["Password"])
        server.sendmail(message["From"], message["To"].split(",") + message["Cc"].split(","), message.as_string())
        server.quit()
        print('Mail sent')
    except:
        print('Something went wrong...')

sendMail()   

我写这段代码就是为了做你想做的。如果你发现了一个bug,请告诉我(我已经测试过了,而且很有效):

import email as em
import smtplib as smtp
import os

ENDPOINTS = {KEY: 'value@domain.com'}


class BoxWriter(object):

    def __init__(self):
        pass

    def dispatch(self, files, box_target, additional_targets=None, email_subject=None, body='New figures'):
        """
        Send an email to multiple recipients

        :param files: list of files to send--requires full path
        :param box_target: Relevant entry ENDPOINTS dict
        :param additional_targets: other addresses to send the same email
        :param email_subject: optional title for email
        """

        destination = ENDPOINTS.get(box_target, None)
        if destination is None:
            raise Exception('Target folder on Box does not exist')

        recipients = [destination]
        if additional_targets is not None:
            recipients.extend(additional_targets)

        subject = 'Updating files'
        if email_subject is not None:
            subject = email_subject

        message = em.MIMEMultipart.MIMEMultipart()
        message['From'] = 'user@domain.com'
        message['To'] = ', '.join(recipients)
        message['Date'] = em.Utils.formatdate(localtime=True)
        message['Subject'] = subject

        message.attach(em.MIMEText.MIMEText(body + '\n' +'Contents: \n{0}'.format('\n'.join(files))))

        for f in files:
            base = em.MIMEBase.MIMEBase('application', "octet-stream")
            base.set_payload(open(f, 'rb').read())
            em.Encoders.encode_base64(base)
            base.add_header('Content-Disposition', 'attachment; filename={0}'.format(os.path.basename(f)))
            message.attach(base)

        conn = smtp.SMTP('smtp.gmail.com', 587)
        un = 'user@gmail.com'
        pw = 'test1234'
        conn.starttls()
        conn.login(un, pw)
        conn.sendmail('user@domain.com', recipients, message.as_string())
        conn.close()

相关问题 更多 >