如何使用Python通过网页版Outlook发送邮件?
使用Python通过网页版Outlook发送邮件的可行方案
方法1:Microsoft Graph API(官方推荐)
网页版Outlook依托微软365云服务,通过Microsoft Graph API是最稳定可靠的官方方案,步骤如下:
- 在Azure Active Directory中注册应用,获取
客户端ID、租户ID,并配置Mail.Send的API权限 - 安装依赖库:
pip install azure-identity msgraph-sdk
- 示例代码(用户名密码流程,适合脚本场景):
from azure.identity import UsernamePasswordCredential from msgraph import GraphServiceClient # 替换为你的配置参数 CLIENT_ID = "你的客户端ID" TENANT_ID = "你的租户ID" USERNAME = "你的Outlook邮箱账号" PASSWORD = "你的邮箱密码" # 初始化认证凭据与Graph客户端 credential = UsernamePasswordCredential(CLIENT_ID, USERNAME, PASSWORD, tenant_id=TENANT_ID) client = GraphServiceClient(credential) # 构造邮件内容 message = { "subject": "测试邮件", "body": { "contentType": "Text", "content": "这是通过Python调用Graph API发送的网页版Outlook邮件" }, "toRecipients": [ { "emailAddress": { "address": "收件人邮箱@xxx.com" } } ] } # 发送邮件并保存到已发送 client.me.send_mail.post(body={"message": message, "saveToSentItems": True})
注意:用户名密码流程受微软安全策略限制,若认证失败,需确保账号开启现代认证且未启用MFA;若需MFA支持,可改用
DeviceCodeCredential等凭据类型
方法2:Selenium模拟网页操作(仅临时测试用)
如果不想配置API,可通过Selenium模拟浏览器登录网页版Outlook发送邮件,但该方法稳定性差,易触发安全验证,步骤如下:
- 安装依赖:
pip install selenium
- 示例代码(Chrome浏览器):
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time # 初始化浏览器 driver = webdriver.Chrome() driver.get("https://outlook.office.com/mail/") # 登录(需手动处理验证码或MFA,或提前保存登录状态) driver.find_element(By.ID, "i0116").send_keys("你的邮箱账号") driver.find_element(By.ID, "idSIButton9").click() time.sleep(2) driver.find_element(By.ID, "i0118").send_keys("你的邮箱密码") driver.find_element(By.ID, "idSIButton9").click() time.sleep(5) # 新建并发送邮件 driver.find_element(By.XPATH, "//button[contains(text(), '新建邮件')]").click() time.sleep(2) driver.find_element(By.XPATH, "//input[@aria-label='收件人']").send_keys("收件人邮箱@xxx.com") driver.find_element(By.XPATH, "//input[@aria-label='添加主题']").send_keys("测试邮件") driver.find_element(By.XPATH, "//div[@role='textbox']").send_keys("这是Selenium模拟发送的网页版Outlook邮件") driver.find_element(By.XPATH, "//button[contains(text(), '发送')]").click() time.sleep(3) driver.quit()
提示:Outlook网页版更新后元素定位可能失效,该方法仅适合临时测试,不建议用于生产环境
内容的提问来源于stack exchange,提问作者Ксения Митуля
相关产品推荐
相关产品推荐

