【问题标题】:Python, Gmail, Sent Emails Displaying Addresses as Lists of CharactersPython,Gmail,已发送电子邮件,将地址显示为字符列表
【发布时间】:2017-06-01 02:33:37
【问题描述】:

我编写了一个成功发送电子邮件的电子邮件模块,但收件人看到他们的电子邮件地址显示为逗号分隔的字符列表。在 gmail 网络邮件页面中,它看起来像这样:t, e, s, t, @, g, m, a, i, l, ., c, o, m,,但每个字母之间有一个新行。在 Thunderbird 电子邮件客户端中,它看起来像这样:t<>, e<>, s<>, t<>, @<>, g<>, m<>, a<>, i<>, l<>, .<>, c<>, o<>, m<>,。我正在使用 gmail 发送这些电子邮件。下面是我写的电子邮件模块。谁能帮我弄清楚如何使电子邮件地址正常显示给收件人?提前谢谢你。

import smtplib
import ConfigurationManager
from email import encoders
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText


class EmailHandler(object):
    def __init__(self, passed_values):
        self._filename = passed_values.get('filename')
        self._subject = passed_values.get('subject')
        self._from_address = passed_values.get('from_address')
        self._to_addresses = passed_values.get('to_addresses')
        self._email_password = passed_values.get('email_password')
        self._body = passed_values.get('body')

    @property
    def filename(self):
        return self._filename

    @filename.setter
    def filename(self, value):
        self._filename = value

    @property
    def from_address(self):
        return self._from_address

    @from_address.setter
    def from_address(self, value):
        self._from_address = value

    @property
    def to_addresses(self):
        return self._to_addresses

    @to_addresses.setter
    def to_addresses(self, value):
        self._to_addresses = value

    @property
    def body(self):
        return self._body

    @body.setter
    def body(self, value):
        self._body = value

    @property
    def subject(self):
        return self._body

    @body.setter
    def body(self, value):
        self._body = value

    def send_email_with_attachment(self):
        msg = MIMEMultipart()
        msg['From'] = self._from_address
        msg['To'] = ', '.join(self._to_addresses)
        msg['Subject'] = self._subject
        msg.attach(MIMEText(self._body, 'plain'))
        attachment = open (self._filename + '.zip', "rb")
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(attachment.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', "attachment; filename= %s" % self._filename + '.zip')
        msg.attach(part)
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        server.login(self._from_address, self._email_password)
        text = msg.as_string()
        server.sendmail(self._from_address, self._to_addresses, text)
        server.quit()

【问题讨论】:

  • 您是否偶然将to_addresses 作为字符串传递?它应该是一个字符串列表。如果你只想传递一个to_address,那么它仍然应该是一个只有一个元素的列表,即['test@example.com']
  • 就是这样。一个非常简单的更改,因为电子邮件地址已经开始在列表中。我将它们转换为字符串,因为我认为这是必要的。非常感谢!如果您将此作为答案发布,我会接受。
  • 已作为答案发布,谢谢!

标签: python email gmail


【解决方案1】:

如果您将to_addresses 作为字符串传递,那么它会将字符串的每个字符与, 连接起来。

在代码中您将其视为一个列表,因此即使您只传递一个电子邮件地址,它也必须是列表中的单个字符串元素,如下所示:

['test@example.com']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多