问题描述
我刚刚学习使用 smtplib
包和 MIMEText
中的 email.mime.text
函数发送自动邮件。
似乎一切正常,但有时(并非总是如此!)我在发送的邮件中发现不需要的新行。我收到的邮件示例:
嗨,斯蒂芬,
您的自动搜索获得了存储在您的 discogs 应用程序中的每个版本的以下廉价列表:
没有找到 13669663 的廉价房源
:'Alloy Mental - 我是'..
这两行应该看起来像一行:没有找到 13669663 的廉价商品:'Alloy Mental - I am'..
我不确定为什么会发生这种情况,在少数情况下不会发生这种情况(release_id
和 full_title
的其他值,但我还没有注意到那里的模式..)>
我的代码如下:
import stmplib
import ssl
from email.mime.text import MIMEText
from logger import loguru
host = 'smtp.office365.com'
port = 587
def message_string(release_id,full_title):
release_title = f"{release_id}: '{full_title}'"
message = f"""\
Hi Stefan,Your automated search obtained the following cheap listings per release stored in you discogs application:
No cheap listings found for {release_title}..
"""
return message
def create_message(release_id,full_title):
message = message_string(release_id,full_title)
msg = MIMEText(message.encode('utf-8'),_charset='utf-8')
msg["Subject"] = "Daily discogs tracking results"
msg["From"] = "xxx"
msg["To"] = "yyy"
return msg
def send_message(release_id,full_title):
msg = create_message(release_id,full_title)
context = ssl.create_default_context()
with smtplib.SMTP(host=host,port=port) as server:
server.starttls(context=context)
server.login(user="xxx",password="zzz")
server.sendmail(from_addr="xxx",to_addrs="yyy",msg=msg.as_string())
logger.info("email send,quitting server..")
server.quit()
当我运行 message_string
函数时,创建的字符串似乎没问题。但是在 MIMEText
部分或 send_message
部分的某处,它将这些字符串分成两半。有人能帮我理解这种情况是如何发生的以及为什么发生吗?
这发生在我发送的其中一封邮件中:
输入
msg = create_message(...)
print(msg.as_string())
'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-transfer-encoding: base64\nSubject: Daily discogs tracking results\nFrom: xxx\nTo: yyy\n\nSGkgU3RlZmFuLAoKWW91ciBhdXRvbWF0ZWQgc2VhcmNoIG9idGFpbmVkIHRoZSBmb2xsb3dpbmcg\nY2hlYXAgbGlzdgluZ3MgcGVyIHJlbGVhc2Ugc3RvcmVkIgluIHlvdSBEaXNjb2dzIGFwcGxpY2F0\naW9uOgpObyBjaGVhcCBsaXN0aW5ncyBmb3VuZCBmb3IgMTM2Njk2NjM6ICdSaWtodGVyIC0gUklL\nMScuLg0KDQpObyBjaGVhcCBsaXN0aW5ncyBmb3VuZCBmb3IgMTQxODY1MTogJ0FsbG95IE1lbnRh\nbCAtIEkgQW0nLi4NCg0KTm8gY2hlYXAgbGlzdgluZ3MgZm91bmQgZm9yIDEzNzY4NjgzOiAnREog\nR2lnb2xhLCBLZXYgS29rbyAtIFRlbmRlciBUcmFuY2UnLi4NCg0KIAoxIGxpc3RpbmdzIGZvdW5k\nIGZvciAxNTM2NzU0NDogJ1BhdWwgS2Fsa2JyZW5uZXIgLSBTcGVhayBVcCBFUCc6CisrIEJFU1Qg\nKDwg4oKsNDkuOTkpOgpObyBnb29kIGxpc3RpbmdzIGZvdW5kLi4KCisgR09PRCAoPCDigqw2Mi45\nOSk6Ci0gMTM1MzkwMjIwOTog4oKsNjIuOTUgKyDigqw3LjUgc2hpcHBpbmcuIFNlZSAoaHR0cDov\nL3d3dy5kaXNjb2dzLmNvbS8vc2VsbC9pdGVtLzEzNTM5MDIyMDkpCg0KDQpObyBjaGVhcCBsaXN0\naW5ncyBmb3VuZCBmb3IgNzM0NjEwodogJ1BhdWwgS2Fsa2JyZW5uZXIgLSA3Jy4uDQoNCk5vIGNo\nZWFwIGxpc3RpbmdzIGZvdW5kIGZvciA5OTUwNzogJ0FxdWlsYSAtIFJpdHVhbCBFUCcuLgoKClRo\nYW5rIHlvdSwKWW91ciBhdXRvbWF0ZWQgRGlzY29ncyBMaXN0aW5nIFRyYWNrZXIKICAgIA==\n'
编辑:切换到 email.message
的 EmailMessage()
,现在我在打印时获得以下 msg.as_string()
结果:
'Subject: Daily discogs tracking results\nFrom: xxx\nTo: yyy\nMIME-Version: 1.0\nContent-Type: text/plain; charset="utf-8"\nContent-transfer-encoding: quoted-printable\n\nHi Stefan,\n\nYour automated search obtained the following cheap listings per release store=\nd in you discogs application:\nNo cheap listings found for 13669663: \'Rikhter - RIK1\'..\n\nNo cheap listings found for 1418651: \'Alloy Mental - I Am\'..\n\nNo cheap listings found for 13768683: \'DJ Gigola,Kev Koko - Tender Trance\'..\n\n=20\n1 listings found for 15367544: \'Paul Kalkbrenner - Speak Up EP\':\n++ BEST (< =E2=82=AC49.99):\nNo good listings found..\n\n+ GOOD (< =E2=82=AC62.99):\n- 1353902209: =E2=82=AC62.95 + =E2=82=AC7.5 shipping. See (http://www.discogs=\n.com//sell/item/1353902209)\n\n\nNo cheap listings found for 7346108: \'Paul Kalkbrenner - 7\'..\n\nNo cheap listings found for 99507: \'Aquila - Ritual EP\'..\n\n\nThank you,\nYour automated discogs Listing Tracker\n =20\n'
当我在 Firefox 浏览器的 Outlook 中检查我的电子邮件时,我看到添加了一个额外的
,例如:
...
<div class='PlainText'>
Hi Stefan,<br>
<br>
Your automated search obtained the following cheap listings per release stored in you discogs application:
<br>
No cheap listings found for 1418651
<br>
: 'Alloy Mental - I Am'..
<br>
<br>
....
</div>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)