python实现email_python实现发送邮件

python实现发送邮件小demo:

有服务器的时候设定好对应server的protocol,port,以及对应的content-type即可

相关protocol和port查询对应mail server 说明即可。

import smtplib

from email.mime.text import MIMEText

if __name__ == '__main__':

# 设置邮件服务地址及默认端口号,这里选择的是outlook邮箱

smtp_server = "smtp.office365.com:587"

# 设置发送来源的邮箱地址

mail_account = "xxxx@xxx.com"

mail_passwd = "xxxxx"

sender_email = "receiver@www.com"

receiver_email = ["xxxx@xxx.com","xxxx@xxx.com"]

# subject代表邮件主题信息

subject = 'subject\n\n'

body = 'bodystr'

content = 'content\r\n'

# 普通文本邮件

headers = ["From: " + sender_email,

"To: " + ";".join(receiver_email),

"MIME-Version: 1.0",

"Content-Type: text/html",

"Subject: " + subject+body,

]

headers = "\r\n".join(headers)

server = smtplib.SMTP()

# 服务器连接

server.connect(smtp_server)

# 返回服务器特性

server.ehlo()

# 进行TLS安全传输

server.starttls()

# 账号密码登录

server.login(mail_account, mail_passwd)

# 邮件正文发送

body = "Dear Student, \n Please send your report\n Thank you for your attention"

server.sendmail(sender_email, receiver_email, headers)

# 关闭服务器连接

server.close()

小插曲:

使用office365的时候出现了一个问题,投放到接收者mail server时返回了拒绝信息:

Your message contains invalid characters (bare line feed characters) which the email servers at qq.com don't support.

查询后了解到原来是由于发送的邮件体里包含了收方邮件服务器认为的非法字符,而office365之前是会在发送出去之前进行处理,删除发送出去的非法字符。后来根据RFC1830标准规定,添加了对BDAT的支持,故取消了删除该字符的处理,也因此导致了拒信的出现。

[来自office365的解释](https://support.office.com/en-gb/article/Fix-email-delivery-issues-for-error-code-5-6-11-in-Office-365-81dafee7-26af-4d79-b174-8f78980dfafb)

在stackoverflow找到的demo代码中发现都进行了 headers = "\r\n".join(headers) 的处理,貌似经过这个处理后就ok了,感谢~~(找不到原链接了,thanks to author)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值