Python 使用企业邮箱发邮件被识别为外部邮箱的问题及解决方案

Python 写了个脚本实现定时发送统计报告, 生产环境中遇到的问题是发出的邮件被公司邮箱服务器识别为外部邮件从而带上警告标识. 如图:

CAUTION: This email originated from outside the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.

在这里插入图片描述
实现的代码大致如下, 端口用的 587:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
'''
    发送Excel到指定邮箱
'''
def sendEmail():
    global summaryFilePath
    global today
    message = MIMEMultipart()
    message['From'] = Header("eflow", 'utf-8')
    message['To'] =  Header(EMAIL_RECEIVERS, 'utf-8')
    subject = '费用归口汇总表_{date}'.format(date=today)
    message['Subject'] = Header(subject, 'utf-8')
    message.attach(MIMEText('附件是{subject}, 请查收'.format(subject=subject), 'plain', 'utf-8'))
    
    att = MIMEApplication(open('./{path}'.format(path=summaryFilePath), 'rb').read())
    att.add_header('Content-Disposition', 'attachment', filename = summaryFilePath)
    message.attach(att)
    
    try:
        smtpObj = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        smtpObj.starttls()
        smtpObj.login(EMAIL_SENDER, EMAIL_PWD)
        smtpObj.sendmail(EMAIL_SENDER, EMAIL_RECEIVERS.split(';'), message.as_string())
        logger.info("邮件发送成功")
    except smtplib.SMTPException as e:
        logger.error(e)

用的是从网上拷的代码, 发现有识别问题后又搜了很久没找到另外的版本, 习惯的拿来主义不管用了. 没办法, 最后在官方找到了合适的方案.

参考: https://docs.python.org/3/library/email.examples.html#email-examples

修改后的代码如下:

def sendEmail():
    global summaryFilePath
    global today
    subject = '费用归口汇总表_{date}'.format(date=today)
    try:
        msg = EmailMessage()
        msg.set_content('附件是{subject}, 请查收'.format(subject=subject))
        msg['Subject'] = subject
        msg['From'] = EMAIL_SENDER
        msg['To'] = EMAIL_RECEIVERS.split(';')
        msg['Bcc'] = BCC_EMAIL_RECEIVERS.split(';')
        with open(summaryFilePath, 'rb') as content_file:
            content = content_file.read()
            msg.add_attachment(content, maintype='application', subtype='excel', filename=summaryFilePath)
        smtpObj = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        smtpObj.ehlo(SMTP_SERVER)
        smtpObj.starttls()
        smtpObj.login(EMAIL_SENDER, EMAIL_PWD)
        smtpObj.send_message(msg)
        smtpObj.quit()
        logger.info("邮件发送成功")
    except smtplib.SMTPException as e:
        logger.error(e)

完美解决问题.
最后吐槽一下, 网上的代码抄来抄去并且有时效性问题, 以后还是尽量看官方的文档优先吧.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python微信企业邮箱发送邮件需要使用第三方库,常用的有smtplib、email、os等库。 首先需要导入所需的库,并定义发件人、收件人、邮件主题和内容等信息。使用email库创建一个MIMEText对象,将邮件内容存储在该对象的msg属性中。接着使用smtplib库创建SMTP对象,连接到企业邮箱服务器,使用用户名和密码登录。最后调用SMTP对象的sendmail方法,将邮件发送给收件人。 可能会遇到企业邮箱发件人地址需要通过审核的问题,需要在企业邮箱后台进行设置。 下面是一个简单的python微信企业邮箱发送邮件的示例代码: ```python import smtplib from email.mime.text import MIMEText import os # 发件人、收件人、邮件主题、邮件内容等信息 sender = 'xxx@yourcompany.com' receiver = 'xxx@othercompany.com' subject = 'Python发送企业邮件' content = '这是一封测试邮件,仅供参考。' # 创建MIMEText对象,邮件内容存储在该对象的msg属性中 msg = MIMEText(content) msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver # 定义企业邮箱服务器和用户名、密码 smtp_server = 'smtp.exmail.qq.com' user_name = 'your_username' password = 'your_password' # 使用SMTP对象连接到企业邮箱服务器,并进行登录验证 smtp_obj = smtplib.SMTP(smtp_server, 587) smtp_obj.ehlo() smtp_obj.starttls() smtp_obj.login(user_name, password) # 发送邮件 smtp_obj.sendmail(sender, receiver, msg.as_string()) # 关闭连接 smtp_obj.quit() ``` 需要注意的是,在实际使用时,需要将代码中的发件人、收件人、企业邮箱服务器、用户名和密码等信息替换为自己的实际信息。同时,还需要考虑邮件附件、邮件格式等问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值