通过SMTP注入到电子邮件中的额外信息

问题描述:

我一直有一个非常奇怪的问题。我有一个golang服务器,并且使用net/smtp发送邮件。直到我们意识到一些额外的信息被注入到电子邮件中,并且雅虎开始忽略我们的电子邮件,这一切进展顺利。不管怎么说,并发送给了我们信息的主体的信息是:通过SMTP注入到电子邮件中的额外信息

From: [email protected] 
To: [email protected] 
Subject: Testing 
MIME-version: 1.0; 
Content-Type: text/html; charset="UTF-8"; 
<html> 
    <b> Testing </b> 
</html> 

那然后被发送到亚马逊SES,我们用来发送电子邮件帐户上GoDaddy的托管。 当电子邮件到达时,我使用Gmail显示原始邮件正文中,我得到这个:

From: [email protected] 
To: [email protected] 
Subject: Testing 
MIME-version: 1.0; 
Content-Type: text/html; charset="UTF-8"; 

<html> 
    <b> Testing </b> 
</html> 
Date: Wed, 29 Oct 2014 11:00:56 +0000 
Message-ID: <[Lots of Numbers]@email.amazonses.com> 
X-SES-Outgoing: [Some Numbers] 
Feedback-ID: us-east-1.[numbers]=:AmazonSES 

因此,那些4个额外的字段将会上涨到我们的邮件正文,这我相信会导致我们越来越标记为垃圾邮件或更糟(雅虎是残酷的。)有谁知道这4条线可以添加在哪里?绝对看起来像SES,但我相信Godaddy少了很多。

(有,我们有我们的身体不同间距的点,然后将信息将注入在邮件正文的任意位置)

+2

是的,其他服务器处理您的电子邮件,并添加页眉收件人服务器可能用来确定你的声望。建立电子邮件信誉需要一段时间,并涉及您的IP和您的域名;首先,它可能有助于将邮件主要发送给活跃用户,或者只是对不发送不需要的邮件(需要人们在设置帐户时验证电子邮件)额外警惕。您可以对SES等其他电子邮件发送服务(如SendGrid)进行A/B测试(在Web上搜索其他选项),以查看谁最能帮助您入门。 – twotwotwo 2014-11-03 01:50:56

+4

所有这些最可能的解释是SES试图添加* headers *,但是您的消息不是根据规范构建的,SES无法正确找到标题和正文之间的边界。事实上,你甚至没有添加日期表明你的电子邮件是手动滚动的,而不是最好的想法。 – 2014-11-03 02:24:09

+3

如果第一个片段的确是您的邮件的发送方式,那么您的标题之后确实需要一个空行。 ['mime'](http://golang.org/pkg/mime/)和['mime/multipart'](http://golang.org/pkg/mime/multipart/)可以提供帮助。 – twotwotwo 2014-11-03 03:00:18

您需要在标题和正文之间添加换行符(\r\n)。

此外,如果你想要一个简单的方法来发送电子邮件在Go可以使用Gomail(我是作者):

package main 

import (
    "gopkg.in/gomail.v2" 
) 

func main() { 
    m := gomail.NewMessage() 
    m.SetHeader("From", "[email protected]") 
    m.SetHeader("To", "[email protected]") 
    m.SetHeader("Subject", "Testing") 
    m.SetBody("text/html", `<html> 
    <b> Testing </b> 
</html>`) 

    d := gomail.NewPlainDialer("smtp.example.com", 587, "user", "123456") 
    if err := d.DialAndSend(m); err != nil { 
     panic(err) 
    } 
} 
+0

谢谢Gomail的作者,我会给它一个测试! – 2014-11-04 23:05:05

+0

我爱图书馆。唯一的问题是它依赖于引用的可打印库。我会回来,如果我知道了 – 2014-11-05 02:54:38

+0

嘿啤酒,一切工作在1。3,但是你需要更新你的库为1.4,据我可以告诉软件包名称“内部”现在由去使用,所以你需要改变它从内部 – 2015-01-08 01:08:47

你缺少头部和身体之间的\ r \ n。您还缺少日期和消息ID标头。大量的垃圾邮件过滤器将忽略这些作为马虎垃圾邮件/病毒邮件的良好标志。没有纯文本替代品也是一样。

默认情况下,Sendgrid或mandrill可能有助于正确获取这些东西。

+0

感谢您提示 – 2014-11-03 04:33:06

+0

我强烈建议使用下面的Ale的库,它的动作包装,​​易于设置,并且像魅力一样工作 – 2014-12-16 13:43:15

+0

SMTP MTA自动添加一个'MessageId'头如果缺失。 Amazon SES甚至覆盖现有的'MessageId' AFAIK。 – 2016-03-18 16:28:05