如何将Outlook集成到Django网站 实现网站发信同步至发件箱
实现Django发件同步到Outlook已发送文件夹的可行方案
两种经过验证的实现方式,可根据你的业务场景选择:
方案1:使用微软官方SMTP服务(适合单固定发件人场景)
如果你使用的是微软365/个人Outlook邮箱,直接配置Django SMTP为Outlook官方服务,通过该通道发送的邮件会自动同步到对应邮箱的已发送文件夹,无需额外开发。
配置代码
在Django的settings.py中添加如下配置:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.office365.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = '你的Outlook完整邮箱地址' # 开启账号二次验证时,需替换为微软账号中心生成的专用应用密码 EMAIL_HOST_PASSWORD = '你的邮箱密码/应用密码' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
注意事项
- 必须保证
DEFAULT_FROM_EMAIL与EMAIL_HOST_USER完全一致,否则无法触发自动同步已发送的逻辑 - 个人Outlook账号开启两步验证后,不能直接使用原账号密码,需到微软账号安全中心生成应用密码使用
- 该方案仅适合发件人为固定1~少数几个Outlook邮箱的场景
方案2:调用Microsoft Graph API(适合多用户绑定场景)
如果你的网站支持多个用户绑定各自的Outlook邮箱发件,使用Graph API是更稳妥的方案,发件时可直接配置自动存入已发送文件夹。
前置准备
在Azure应用注册门户创建应用,申请Mail.Send的API权限,获取租户ID、客户端ID、客户端密钥。
代码示例
- 先安装依赖:
pip install msgraph-core azure-identity - 发件逻辑代码:
from azure.identity import ClientSecretCredential from msgraph.core import GraphClient # 初始化Graph客户端 credential = ClientSecretCredential( tenant_id="你的Azure应用租户ID", client_id="你的Azure应用客户端ID", client_secret="你的Azure应用客户端密钥" ) graph_client = GraphClient(credential=credential, scopes=['https://graph.microsoft.com/.default']) # 构造邮件参数 mail_params = { "message": { "subject": "测试邮件标题", "body": { "contentType": "HTML", # 也可设为Text发送纯文本邮件 "content": "<p>这是测试邮件内容</p>" }, "toRecipients": [ {"emailAddress": {"address": "收件人邮箱地址"}} ] }, "saveToSentItems": "true" # 该参数控制是否同步到已发送文件夹,默认值为true } # 调用发件接口 graph_client.post('/users/[发件人Outlook邮箱地址]/sendMail', json=mail_params)
注意事项
- 若使用OAuth2授权用户绑定自己的Outlook邮箱,只需替换接口中的发件人邮箱为对应用户的邮箱地址即可,邮件会自动同步到该用户的已发送文件夹
- 相比SMTP方案,该方案的发件频率限制更高,同时支持更多自定义邮件功能
内容的提问来源于stack exchange,提问作者shubham arya
相关产品推荐
相关产品推荐

