使用 office 365 SMTP 发送企业邮件

这篇具有很好参考价值的文章主要介绍了使用 office 365 SMTP 发送企业邮件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 office 365 SMTP 发送企业邮件

背景

最近公司的企业邮箱从 gmail 迁移到了 office 365。不得不说,微软 office 套件的功能在市场上还是无人可以取代的。公司自然需要用 office 365 向客户发送邮件,因此需要重新配置项目的 SMTP 服务器。

一开始直接将 gamil 的 SMTP 服务器地址换成 office 365 的地址即“smtp.office365.com”,但是一直收到下面的错误提示,很容易想到是用户名和密码错误,在确认用户名和密码没有问题之后错误仍然一直存在,在查阅资料(baidu,google,bing)之后,也一直没找到合适的解决方案(基本都是在贴各种常规代码),最终在和客服进行几次交流之后找到了问题的所在。

Traceback (most recent call last):
	File "/Users/crown/Projects/hub/docs/email-try.py", line 49, in send
		smtp_obj.login('lilu.cao@orbitfin.ai',"xxx")
	File "/opt/miniconda3/envs/webtest/Lib/python3.7/smtplib.py", line 730, in Login
		raise last_exception
	File "/opt/miniconda3/envs/webtest/lib/python3.7/smtplib.py", line 721, in login
		initial_response_ok=initial_response_ok)
	File "/opt/miniconda3/envs/webtest/lib/python3.7/smtplib.py", line 642, in auth
		raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, b'5.7.139 Authentication unsuccessful, the request did not meet the criteria to be authenticated successfully.

接下来通过配置下面三个步骤完成邮箱的 SMTP 邮件发送。

三步配置

正确的发送代码(python)

这一步是最简单的,网上有很多优秀的封装的 email 发送类,我这里贴出一个之前用过的:

import emails
from emails.template import JinjaTemplate as T


USERNAME = 'xxx'
PASSWORD = 'xxx'
smtp_conf = {'host': 'smtp.office365.com',
             'user': USERNAME,
             'password': PASSWORD,
             'port': 587,
             'tls': True}


def send_email():
    message = emails.html(subject=T('测试邮件'),
                          html=T('<p>详情见附件<br><br>'),
                          mail_from=('auto-reporter', USERNAME))
    message.attach(data=open('readme.md', 'r'), filename="readme.txt")
    r = message.send(to=('Orangleliu', USERNAME), smtp=smtp_conf)
    print(r)


def office365():
    import smtplib
    mailserver = smtplib.SMTP('smtp.office365.com', 587)
    mailserver.ehlo()
    mailserver.starttls()
    mailserver.login(USERNAME, PASSWORD)
    mailserver.sendmail(USERNAME, USERNAME, 'python email')
    mailserver.quit()


if __name__ == "__main__":
    send_email()

————————————————
版权声明:本文为CSDN博主「orangleliu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/orangleliu/article/details/84065548

需要注意的是,在使用 office 365 的 smtp 服务的时候,加密要用 tls 而不是 ssl,也就是:

mailserver.starttls()
在组织中启用 SMTP AUTH

office 365 默认是对每一个用户都不启用 SMTP AUTH 的,因此我们需要对要使用 SMTP 进行发送邮件的用户开启 SMTP AUTH。一共有两种开启方式,一种是管理员登录 admin 控制中心(https://admin.microsoft.com/)针对相应的用户进行开启。具体步骤如下:

1)登入 office 365 管理中心

通过 https://admin.microsoft.com/ 登入管理中心,然后根据下图依次点击找到对应用户的 “Manage email apps”。

使用 office 365 SMTP 发送企业邮件

2)勾选 Authenticated SMTP

然后点击 Manage email apps,在打开的侧边栏中将最后一项 “Authenticated SMTP” 勾选上。

使用 office 365 SMTP 发送企业邮件

第二种方式是通过 powershell 进行操作,这种方式在这里不做具体阐述,具体可以参考下面的官网链接。

[中文版本] https://docs.microsoft.com/zh-cn/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission

[英文版本] https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission

关闭安全性默认值

这一步至关重要,即便是我们开启了 SMTP AUTH,如果没有关闭安全默认值,那么邮件也无法使用。这一点其实已经在上面的“启用或禁用通过身份验证的客户端 SMTP (SMTP AUTH) Exchange Online”文章中指出,只是我们很难注意到这个点。

使用 office 365 SMTP 发送企业邮件

关于什么是“安全默认值”,可以参考下面点文章。

https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-fundamentals-security-defaults

下面是关闭“安全默认值”的步骤

1) 进入 Azure active directory

我们进入 admin 管理中心后,根据下图,进入 Azure active directory。

使用 office 365 SMTP 发送企业邮件

2) 关闭安全默认值

在 Azure active directory 界面,通过下图的指示,关闭安全默认值。

使用 office 365 SMTP 发送企业邮件

总结

完成上述三个步骤,我们就可以成功的通过 python 使用 office 365 的 SMTP 进行邮件发送。尤其是最有一步,对于默认安全值的问题,如果没有咨询微软的客服,很难排查出发送失败的原因。

参考文档

[1] Python 使用office365邮箱自动发送邮件 https://blog.csdn.net/orangleliu/article/details/84065548?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_ecpm_v1~rank_v31_ecpm-1-84065548.pc_agg_new_rank&utm_term=Python+%E4%BD%BF%E7%94%A8office365%E9%82%AE%E7%AE%B1%E8%87%AA%E5%8A%A8%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6&spm=1000.2123.3001.4430

[2] python3使用smtplib发送邮件,带xlsx附件 https://www.cnblogs.com/xiao987334176/p/11975248.html

[3] 启用或禁用通过身份验证的客户端 SMTP (SMTP AUTH) Exchange Online https://docs.microsoft.com/zh-cn/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission

[4] Enable or disable authenticated client SMTP submission (SMTP AUTH) in Exchange Online https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission

[5] Security defaults in Azure AD https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/concept-fundamentals-security-defaults文章来源地址https://www.toymoban.com/news/detail-471059.html

到了这里,关于使用 office 365 SMTP 发送企业邮件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网工应用层:电子邮件Email、SMTP协议与使用Telnet发送电子邮件

    参考资料: https://www.bilibili.com/video/BV1c4411d7jb?p=72vd_source=e66dd25b0246f28e772d75f11c80f03c 湖科大的高军老师做的计算机网络课,去年选修的计网全靠高老师,生动,举例丰富,配套实验课,无废话纯干货,单推一波! 电子邮件(E-mail)是一种用电子手段提供信息交换的通信方式,是

    2024年02月14日
    浏览(59)
  • 一、Postfix[安装与配置、smtp认证、Python发送邮件以及防垃圾邮件方法、使用腾讯云邮件服务]

    Debian 11 apt install postfix 解释:搭建真实的邮件服务器需要在DNS提供商那里配置下面的dns 配置A记录 mail.www.com - 1.x.x.x 配置MX记录 www.com - mail.www.com 解释:按照上面的配置通常邮件格式就是 admin@www.com 其通过www.com的MX记录找到mail.www.com再通过其A记录来找到对应服务器完成通讯 解

    2024年02月15日
    浏览(36)
  • smtp 通过465端口发送邮件失败

    注意:此处因为服务器配置smtps端口是465,方才有上述结论,若是手动配置了其他端口作smtps的安全端口,同理需要 properties.put(\\\"mail.smtp.ssl.enable\\\", \\\"true\\\");

    2024年02月09日
    浏览(27)
  • Python SMTP发送邮件和线程

    SMTP(Simple Mail Transfer Protocol)即 简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式 。 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。 Python创建 SMTP 对象语法如下: 参数说明: host: SMTP 服

    2023年04月11日
    浏览(30)
  • C# SMTP 邮件发送傻瓜操作

      /// summary  /// 发送邮件的方法  /// /summary  public OperateResultint SendMail(MailModel mails)  {      var resultData = new OperateResultint();      if (mails.to == null || !mails.to.Any())      {          resultData.Status = OperateStatus.Failure;          resultData.Description = \\\"收件人地址不能为空\\\";        

    2024年01月19日
    浏览(26)
  • QQ 邮箱使用 SMTP 发送邮件报错:550 The From header is missing or invalid

    QQ 邮箱使用 SMTP 发送邮件报错: 550 The From header is missing or invalid : 源码( pthon 3.12 ) 看到 QQ 邮箱对 header 中的 from 有合法性校验,我们的字段格式符合要求,怀疑是字符编码问题。 通过打印封装的 message 查看我们的 From 字段乱码,去掉 utf-8 编码。 再次测试,正常发送邮件

    2024年04月16日
    浏览(62)
  • 使用SpringBoot + JavaMailSender 发送邮件报错 Mail server connection failed;Could not connect to SMTP host

    在 application.yml 中将邮件配置为 SSL 连接 yml 如果你使用的是 properties 文件,应该修改为: properties 推荐一个 yml、properties 文件在线转换的网站  在线yaml转properties-在线properties转yaml-ToYaml.com   来源:https://www.cnblogs.com/songjilong/p/12577010.html

    2024年02月04日
    浏览(41)
  • SMTP邮件发送图片-如何在github中存储图片并访问

    之前写了一篇文章 Go:实现SMTP邮件发送订阅功能(包含163邮箱、163企业邮箱、谷歌gmail邮箱),实现了通过邮箱服务来发送邮件,但都是文字内容,要是想实现邮件发送图片,就需要将图片放到公网可访问的服务器,这里用了骚操作。 实现邮件群发功能,来发送项目的周报及

    2024年02月06日
    浏览(37)
  • java SMTP邮件发送,修复SSL下465端口Could not connect to SMTP

    起因:开发邮件发送系统时,使用25端口能够正常发送邮件,启用SSL使用465端口时,发送邮件报Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 465的错误。 由于25端口可以正常发送邮件,所以可以保证账号和网络是通的,那么可能就出在465出站权限或者服务器环境问题。 经运维

    2024年02月02日
    浏览(33)
  • c++实现smtp发送邮件,支持ssl的465端口发送,支持附件、一次发送多人、抄送等

    c++实现smtp发送邮件,支持ssl的465端口发送,支持附件、一次发送多人、抄送等。 这里只使用了openssl库(用来支持ssl的465端口),其他部分是原生c++,支持在win/linux运行。 网上很多都是原始的支持25端口,明文发送,这里介绍一下ssl思路 使用sockect编程和ssl,使用SMTP协议。 使

    2024年02月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包