首页 > 解决方案 > 通过python连接公司内部SMTP服务器时使用共享邮箱

问题描述

IT 部门已授予我访问权限,可以通过内部 smtp 服务器上的共享邮箱发送电子邮件,我可以通过 Outlook 应用程序和使用 Outlook 的 win32com 库来发送电子邮件。但是,该程序将在没有安装 Outlook 桌面应用程序的 Windows 机器上运行,因此我需要使用 smtplib 发送此电子邮件。我尝试使用我的个人电子邮件和密码进行连接,然后将发件人地址设置为共享电子邮件,它说我无权从我做的这个地址发送。我还尝试使用“SendAs”和“SentOnBehalfOfName”(下面注释掉)将发件人地址作为我的个人邮件,并且这封电子邮件刚刚收到,就好像我是从我的个人发送的一样。任何指导、对代码的改进或尝试的解决方案将不胜感激。谢谢你。

import smtplib 
from email.message import EmailMessage

port = 587

smtp_server = "internal_smtp_host"
sender_email = "personal_company_address"  
receiver_email = "" 
shared_mail = "shared_company_mailbox"
password = "personal_password"

msg = EmailMessage()
msg['Subject'] = 'Test'
msg['From'] = shared_mail
msg['To'] = receiver_email

#Try to log in to server and send email

try:
    server = smtplib.SMTP(smtp_server)
    server.connect(smtp_server, port)
    server.ehlo()
    server.starttls()
    server.ehlo
    server.login(sender_email, password)
    #server.SendAs = shared_mail 
    #server.SentOnBehalfOfName = shared_mail 
    server.set_debuglevel(True)
    server.send_message(msg)
except Exception as e:
    print('Failed') 
    print(e)
finally:
    server.quit()

标签: pythonemailsmtpshared

解决方案


确保有权代表共享邮箱发送电子邮件

import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase


def send_email(user,password,SEND_FROM,SEND_TO,SUBJECT,MAIL_BODY):
    multipart = MIMEMultipart()
    multipart['From'] = SEND_FROM
    multipart['To'] = SEND_TO
    multipart['Subject'] = SUBJECT


    mailserver = smtplib.SMTP(host='smtp.office365.com', port=587)
    mailserver.ehlo()
    mailserver.starttls()
    mailserver.ehlo()
    mailserver.login(user, password)

    mailserver.sendmail(SEND_FROM, SEND_TO, multipart.as_string())
    mailserver.quit()

user        = '<Your email account>'
password    = '<Email password>'
SEND_FROM   = '<Shared mailbox email>'
SUBJECT     = '<Subject>'
MAIL_BODY   = '<Email body>'
send_email(user,password,SEND_FROM,SEND_TO,SUBJECT,MAIL_BODY)

推荐阅读