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)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM