通过python电子邮件模块发送的带有嵌入图片的电子邮件被过滤为垃圾邮件



我正在发送带有以下代码的电子邮件:

import smtplib
from email.message import EmailMessage
from email.utils import make_msgid, formataddr
from pkg_resources import resource_filename

def send_email(addressee, subject, text, cc=None):
msg = EmailMessage()
msg['Subject'] = subject
msg['From'] = formataddr(('Bot', 'bot@domain.fr'))
msg['To'] = addressee
if cc is not None:
msg['CC'] = cc
msg.preamble = subject
msg.set_content(text)
image_cid = make_msgid(domain='domain.fr')
mail_text = """<p>Bonjour,</p>
<p>{text}</p>
<p><img src="cid:{image_cid}"></p> 
<p style="color:rgb(160, 160, 160);font-size:85%;">
___________________________________________________________________________<br>
Ce mail est généré automatiquement, veuillez ne pas y répondre.<br>
Contact : <a href="mailto:bot@domain.fr" target="_top">bot@domain.fr</a>
</p>
""".format(text=text, image_cid=image_cid[1:-1])
msg.add_alternative(mail_text, subtype='html')
with open(resource_filename('my_package', 'mail/img/bot.png'), 'rb') as fp:
img_data = fp.read()
msg.add_attachment(img_data,
cid=image_cid,
maintype='image',
subtype='png')
with smtplib.SMTP('smtp.domain.fr') as s:
s.send_message(msg)

但它被视为垃圾邮件,评分如下:

pts rule name              description
---- ---------------------- --------------------------------------------------
0.00 HTML_IMAGE_ONLY_08     BODY: HTML: images with 400-800 bytes of words
0.00 HTML_MESSAGE           BODY: HTML included in message
0.00 MIME_QP_LONG_LINE      RAW: Quoted-printable line longer than 76 chars
0.82 MIME_QP_LONG_LINE_2    RAW: Quoted-printable line longer than 76 chars
1.78 HTML_IMAGE_ONLY_08_2   HTML: images with 400-800 bytes of words

我想把图片保存在电子邮件中。我怎样才能降低分数?是否可以通过附加图片而不是嵌入图片,或者使用base64对其进行编码来删除MIME_QP_LONG_LINE分数?

有很多(旧的(在线示例使用的是email.mime模块,而不是email.message中的接口。文档显示了这两个接口,但不清楚您应该使用其中一个还是另一个,或者将两者混合使用。然后,我没有找到如何实现这些修复,有人能帮忙吗?

谢谢你的帮助!

SpamAssassin的得分略高于2.5并不是很高。主要权重来自图像(1.78(,你说你不想删除它。但是的,很明显,你可以通过不违反MIME标准来减少0.78。QP应该被包装,我相信Python已经在为图像做这件事了——过长的行可能在文本或HTML内容中。

如果看不到完整的消息,很难准确地确定要看哪里,但检查消息的来源应该可以很容易地揭示引用的可打印部分中的确切行数。

顺便说一句,SpamAssassin并没有抱怨这一点,但做一个不包含任何替代方案的multipart/alternative也看起来你不知道自己在做什么,这当然不会让你成为垃圾邮件发送者,但肯定会让你看起来更像垃圾邮件发送者。将一个mutipart/alternative写入一个纯文本部分和一个HTML部分。

把主题放在MIME序言中也是如此——这太疯狂了。

最新更新