在 Python 中使用 iCloud 发送电子邮件
Sending Email with iCloud in Python
我正在尝试使用以下代码从 iCloud 电子邮件地址发送一些电子邮件:
import smtplib
def main():
smtp_obj = smtplib.SMTP('smtp.mail.me.com', 587)
smtp_obj.starttls()
smtp_obj.login('user@icloud.com', 'password')
pairs = {'name_1': 'email_1@gmail.com', 'name_2': 'email_2@gmail.com'}
try:
for name in pairs.keys():
body = 'hi {}'.format(name)
print('Sending email to {}...'.format(name))
send_status = smtp_obj.sendmail(smtp_obj.user, pairs.get(name), body)
if send_status != {}:
print('There was a problem sending mail to {}.\n{}'.format(name, send_status))
except smtplib.SMTPDataError:
print('Sending email to {} failed.'.format(name))
finally:
smtp_obj.quit()
if __name__ == '__main__':
main()
然而,当我 运行 这个时,我只得到一个 SMTPDataError,说,
smtplib.SMTPDataError: (550, b'5.7.0 From address is not one of your addresses')
我试过硬编码不同的地址。当我使用我的地址时,我得到了这个。当我使用一个我知道是错误的地址时,错误消息还会打印出无效的电子邮件(此帐户无法访问 - 例如,列出一个未登录的 gmail 地址以查看会发生什么)。
有人知道这是怎么回事吗?
谢谢!
我解决了这个问题。事实证明,"from" 和 "to" 地址必须作为邮件正文的一部分提供,以便 icloud 发送电子邮件。
我遗漏的代码段如下:
try:
for name in pairs.keys():
msg = ('From: {}\r\nTo: {}\r\n\r\nHi, {}'.format(smtp_obj.user,
pairs.get(name),
name))
print('Sending email to {} at {}...'.format(name, pairs.get(name)))
send_status = smtp_obj.sendmail(from_addr=smtp_obj.user,
to_addrs=pairs.get(name),
msg=msg)
if send_status != {}:
print('There was a problem sending mail to {}.\n{}'.format(name, send_status))
finally:
smtp_obj.quit()
我正在尝试使用以下代码从 iCloud 电子邮件地址发送一些电子邮件:
import smtplib
def main():
smtp_obj = smtplib.SMTP('smtp.mail.me.com', 587)
smtp_obj.starttls()
smtp_obj.login('user@icloud.com', 'password')
pairs = {'name_1': 'email_1@gmail.com', 'name_2': 'email_2@gmail.com'}
try:
for name in pairs.keys():
body = 'hi {}'.format(name)
print('Sending email to {}...'.format(name))
send_status = smtp_obj.sendmail(smtp_obj.user, pairs.get(name), body)
if send_status != {}:
print('There was a problem sending mail to {}.\n{}'.format(name, send_status))
except smtplib.SMTPDataError:
print('Sending email to {} failed.'.format(name))
finally:
smtp_obj.quit()
if __name__ == '__main__':
main()
然而,当我 运行 这个时,我只得到一个 SMTPDataError,说,
smtplib.SMTPDataError: (550, b'5.7.0 From address is not one of your addresses')
我试过硬编码不同的地址。当我使用我的地址时,我得到了这个。当我使用一个我知道是错误的地址时,错误消息还会打印出无效的电子邮件(此帐户无法访问 - 例如,列出一个未登录的 gmail 地址以查看会发生什么)。
有人知道这是怎么回事吗?
谢谢!
我解决了这个问题。事实证明,"from" 和 "to" 地址必须作为邮件正文的一部分提供,以便 icloud 发送电子邮件。
我遗漏的代码段如下:
try:
for name in pairs.keys():
msg = ('From: {}\r\nTo: {}\r\n\r\nHi, {}'.format(smtp_obj.user,
pairs.get(name),
name))
print('Sending email to {} at {}...'.format(name, pairs.get(name)))
send_status = smtp_obj.sendmail(from_addr=smtp_obj.user,
to_addrs=pairs.get(name),
msg=msg)
if send_status != {}:
print('There was a problem sending mail to {}.\n{}'.format(name, send_status))
finally:
smtp_obj.quit()