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

时间:2018-08-03 11:26:50

标签: python email email-spam

我正在使用以下代码发送电子邮件:

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.setDataAndType(Uri.fromFile(new File(url)), "image/jpeg");
    ctx.startActivity(intent);
    callbackContext.success();

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

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)

我想将图像保留在电子邮件中。如何降低分数?是否可以通过附加图片而不是嵌入图片或使用base64对其进行编码来删除MIME_QP_LONG_LINE分数?

有大量的(旧的)在线示例正在使用email.mime模块,但没有使用email.message的界面。该文档显示了这两个接口,但是不清楚是应该使用一个还是另一个,或者将两者混合使用。然后,我找不到如何实施这些修复程序,有人可以帮忙吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

SpamAssassin分数略高于2.5并不是很高的分数。主要的权重来自图像(1.78),您说您不想删除它。但是,是的,显然,您可以通过不违反MIME标准将其降低到0.78。 QP 应该被包装,并且我相信Python已经在对图像进行处理了-超长行可能在您的文本或HTML内容中。

在没有看到完整消息的情况下,很难精确地确定要查找的位置,但是检查消息的来源应该可以轻松地揭示出在带引号的可打印部分中行的确切位置。

顺便说一句,SpamAssassin并没有为此抱怨,但是做一个multipart/alternative却不包含任何替代方法的情况也似乎是您不知道自己在做什么,这当然不会您是垃圾邮件发送者,但无疑会让您看起来更像一个垃圾邮件发送者。将mutipart/alternative放在纯文本部分和HTML部分。

同上将主题放在MIME序言中-这真是太疯狂了。