Python中如何通过win32选择指定邮件账户发送邮件
通过 win32 可以发送邮件,但是好像不可以制定邮件账户,找了一圈发现可以通过SentOnBehalfOfName来发送邮件:
def send_email():
obj = client.Dispatch('Outlook.Application')
new_mail = obj.CreateItem(0)
new_mail.SentOnBehalfOfName= '[email protected]'
new_mail.Subject = 'test'
new_mail.display()
但发觉发送的时候不能发送,发送会失败,错误提醒如下: 您不能代表其他发件人发送邮件,除非您有权这样做。请确认您是否代表正确的发件人发送邮件,或请求所需的权限。如果问题仍然存在,请与支持人员联系。 不知道大家有没有更完美的解决方案
Python中如何通过win32选择指定邮件账户发送邮件
3 回复
import win32com.client
def send_email_via_specific_account(account_name, recipient, subject, body):
"""
通过指定Outlook账户发送邮件
参数:
account_name: Outlook中显示的账户名称(如"user@company.com")
recipient: 收件人邮箱地址
subject: 邮件主题
body: 邮件正文
"""
try:
# 创建Outlook应用实例
outlook = win32com.client.Dispatch("Outlook.Application")
# 创建新邮件
mail = outlook.CreateItem(0) # 0表示olMailItem
# 设置邮件基本信息
mail.To = recipient
mail.Subject = subject
mail.Body = body
# 获取所有账户并选择指定账户
accounts = outlook.Session.Accounts
target_account = None
for account in accounts:
if account.DisplayName == account_name:
target_account = account
break
if target_account:
# 使用指定账户发送
mail.SendUsingAccount = target_account
mail.Send()
print(f"邮件已通过账户 '{account_name}' 发送成功")
else:
print(f"未找到账户: {account_name}")
print(f"可用账户: {[acc.DisplayName for acc in accounts]}")
except Exception as e:
print(f"发送邮件时出错: {str(e)}")
# 使用示例
if __name__ == "__main__":
# 替换为你的实际账户名(在Outlook中显示的完整邮箱地址)
my_account = "your.email@example.com"
send_email_via_specific_account(
account_name=my_account,
recipient="recipient@example.com",
subject="测试邮件",
body="这是一封通过指定账户发送的测试邮件。"
)
核心要点:
- 使用
win32com.client.Dispatch("Outlook.Application")连接Outlook - 通过
outlook.Session.Accounts获取所有已配置账户 - 遍历账户列表匹配
DisplayName找到目标账户 - 设置邮件的
SendUsingAccount属性指定发送账户
注意:账户名称必须是Outlook中显示的完整邮箱地址,运行前确保Outlook已登录且账户配置正确。
一句话建议:确保账户名称与Outlook中显示的完全一致。
准确来说这不是 Win32 的功能而是 Outlook 的功能。
当然不能直接改名发邮件,要服务器允许才可以吧?不然就很容易冒充大公司了呀。

