python - 通过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()
解决方案
确保有权代表共享邮箱发送电子邮件
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)
推荐阅读
- wordpress - 如何删除此跳转到内容 wordpress 错误?
- assertion - Modelica 断言的意外行为
- jenkins - 如何根据多个/不同的参数多次运行 Jenkins 管道。(详情请参阅说明)
- c# - 使用 NetTopologySuite 保存几何时的 Entity Framework Core IndexOutOfRangeException
- angular - 如何从 ionic 3 中的 map.data.addListener 调用函数?
- react-native - 按钮未显示在 android 中的 cardView 上,但在 iOS 中以反应本机工作
- ruby-on-rails - PG::InvalidParameterValue:错误:参数“client_min_messages”的值无效:“恐慌”
- elasticsearch - 带有部分的弹性搜索模板
- ldap - 从内部目录迁移到 LDAP 时在 JIRA 中维护用户历史记录
- sql-server - 如何处理带有 [ ] 方括号的表名?