我收到一条空消息,从 python 和 smtplib 发送

I receive an empty message, sending from python and smtplib

我想从 python 发送一封电子邮件,我阅读了我的文件 (myfile),但我收到一封空的电子邮件...这是我的错误吗?非常感谢社区!

我的代码:

f1 = open('myfile') 
print(f1.read())

fromaddr = 'chucknorris@gmail.com'
toaddrs  = 'brucelee@icloud.com'
msg = "\r\n".join([
"From:" + fromaddr,
"To:" + toaddrs,
"Subject: Message from SB",
"",
str(f1.read())
])
username = 'chucknorris@gmail.com'
password = 'ChuckImmortal'
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

您在这里阅读了整个文件:

f1 = open('myfile') 
print(f1.read())

现在文件指针在末尾;对 f1.read() 的任何进一步调用都将 return 一个空字符串,除非其他进程要向文件添加更多数据。要么将整个消息读入内存,然后打印,要么删除 print() 调用,或者使用 f1.seek(0) 将指针移回开头。

将文件读入变量可以解决这个问题,例如:

with open('myfile') as f1:
    contents = f1.read()
print(contents)

msg = "\r\n".join([
    "From:" + fromaddr,
    "To:" + toaddrs,
    "Subject: Message from SB",
    "",
    contents
])