提问人:arnold 提问时间:9/28/2023 最后编辑:arnold 更新时间:10/8/2023 访问量:141
ServiceDesk 解析使用 smtplib 发送的电子邮件
ServiceDesk parsing email sent using smtplib
问:
让我解释一下情况:我使用(下面的代码)发送一封信给 .
这封信看起来像这样:smtplib
ServiceDesk
Subject: ~Bot~ subject
Body:
~~OPERATION=AddRequest~~
~~REQUESTER=FULL NAME~~
它写在参数中,它解析 中的信息。如果您从邮件(例如)发送一封信,则正常解析所有内容,但如果通过它根本不解析,则主题保持不变,并且不会从参数中替换发件人。ServiceDesk
~
Outlook
ServiceDesk
smtplib
~Bot~ subject
subject
REQUESTER
法典:
import smtplib
from email.mime.text import MIMEText
to = '[email protected]'
gmail_user = '[email protected]'
gmail_pwd = 'password'
smtpserver = smtplib.SMTP("smtp.office365.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
subject = "~Bot~ 123"
msg = MIMEText("~~OPERATION=AddRequest~~\r\n~~REQUESTER=FIO~~")
msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject
smtpserver.sendmail(gmail_user, to, msg.as_bytes())
smtpserver.close()
我尝试在发送消息时更改编码,但没有帮助。我还尝试了另一个用于发送信件的图书馆,结果也失败了。也许我缺乏能力,我根本没有指出一些必需的参数。
告诉我问题可能是什么以及如何解决。谢谢!
答:
0赞
mr_mo
10/2/2023
#1
尝试使用 。这应该根据“正常”约定序列化消息。smtpserver.send_message(msg)
有关详细信息,请参阅 https://docs.python.org/3/library/email.examples.html。
完整代码
import smtplib
from email.mime.text import MIMEText
to = '[email protected]'
gmail_user = '[email protected]'
gmail_pwd = 'password'
smtpserver = smtplib.SMTP("smtp.office365.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
subject = "~Bot~ 123"
msg = MIMEText("""
~~OPERATION=AddRequest~~
~~REQUESTER=FIO~~
""")
msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject
smtpserver.send_message(msg)
smtpserver.close()
评论
0赞
arnold
10/3/2023
感谢您的回复!不幸的是,这种方法没有帮助。还有什么其他想法可能导致这个问题吗?
0赞
mr_mo
10/4/2023
我的猜测是解析器遗漏的编码不正确或空格/换行符。
0赞
Afzal K.
10/8/2023
#2
这里的问题很可能与电子邮件的格式有关。使用 smtplib 时,您发送的是没有任何格式或特殊字符的纯文本电子邮件。因此,ServiceDesk 可能无法正确解析电子邮件,因为它正在寻找特定的字符和格式。
解决方案是使用电子邮件包创建格式正确的电子邮件。
to = '[email protected]'
gmail_user = '[email protected]'
gmail_pwd = 'password'
smtpserver = smtplib.SMTP("smtp.office365.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo
smtpserver.login(gmail_user, gmail_pwd)
subject = "~Bot~ 123"
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject
body = "~~OPERATION=AddRequest~~\r\n~~REQUESTER=FIO~~"
msg.attach(MIMEText(body, 'plain'))
smtpserver.sendmail(gmail_user, to, msg.as_string())
smtpserver.close()
这将创建一个由多个部分组成的电子邮件,其正文包含 ServiceDesk 请求的格式。这应该可以解决问题,并允许 ServiceDesk 正确解析电子邮件。
确保在您的 Google 帐户中启用安全性较低的应用,以便能够使用 smtplib。
评论
0赞
arnold
10/9/2023
谢谢你的回答!不幸的是,你的回答没有帮助,你还有其他建议吗?
评论
电子邮件
示例文档中的新式代码重新开始。email
email
EmailMessage
EmailMessage
EmailMessage
~~OPERATION=AddRequest~~\r\n~~REQUESTER=name~~