乱码html电子邮件

时间:2014-07-09 15:49:48

标签: c# email

我使用.net framework 4.0使用以下代码发送以下html内容(粘贴在下面):

    public void sendHTMLMessage() 
    {
        From = constants.GetValue(EnvironmentVariables.ConstantNames.EMAILFROM);
        MailMessage mail = SetMailMessageParameters();
        smpt = new SmtpClient(constants.GetValue(EnvironmentVariables.ConstantNames.SMTP));
        Utils.EnvironmentLogger.WriteToMessageLog("Sending email message: " + Subject);

        smpt.Send(mail);

    }
    private MailMessage SetMailMessageParameters()
    {

        MailMessage mail = new MailMessage();
        mail.Subject = Subject;
        mail.Body = Body;
        mail.IsBodyHtml = true;
        mail.From = new MailAddress(From);
        List<string> ToArray = Utils.GetArrayFromConstantsClass(To);
        foreach (string element in ToArray)
        {
             mail.To.Add(new MailAddress(element));
        }
        if (!string.IsNullOrEmpty(Attachment))
        {
            mail.Attachments.Add(new Attachment(Attachment));
        }
        return mail;
    }

我基本上只是发送一封简单的电子邮件,而且大部分时间都可以使用,但是当HTML变长时,我收到的邮件只是一堆垃圾邮件:

JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7 / AEwAaQBnAGgAdABpAG4AZwAgAEQA aQBnAGkAdABhAGwAIABDAG8AYwBrAHAAaQB0KQovQ3JlYXRvciAo / v8AdwBrAGgAdABt AGwAdABvAHAAZABmACAAMAAuADEAMgAuADEpCi9Qcm9kdWNlciAo / v8AUQB0ACAANAAu ADgALgA2KQovQ3JlYXRpb25EYXRlIChEOjIwMTQwNzA4MTAwMDA4LTA0JzAwJykKPj4K

并继续......我尝试过不同的编码,似乎无法弄清问题是什么。我也试过以.net 4.5为目标,我也遇到了同样的问题。 HTML在Web浏览器中打开很好,我甚至可以通过outlook发送html,它运行得很好。只是当我通过代码发送它中断时。另一件有趣的事情,如果我只发送一个或两个表(如下所示),它发送就好了,但如果我发送相同的表重复约30次,当它发送乱码时。如果我尝试简单地将HTML附加到电子邮件,它也会做同样的事情。任何帮助将不胜感激。

编辑我在用Fiddler听的时候打开了html电子邮件,得到了以下标题:

HTTP/1.1 200 OK
Date: Thu, 10 Jul 2014 12:23:50 GMT
Server: Apache/2.2.21 (CentOS)
Content-Disposition: inline;filename*=UTF-8''Daily_Sales_Summary_gbl7-8-2014.html
Cache-control: private
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST
Access-Control-Allow-Headers: X-Requested-With
X-XSS-Protection: 0
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=15, max=945
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
Set-Cookie: BIGipServerLIBRARIES_PRD_WEB1=2833575683.20480.0000; expires=Fri, 11-Jul-2014 00:23:51 GMT; path=/

以下是HTML文件的内容:

<html>
    <head>
        <title>HTML Table Email Test</title>
    </head>
        <style type="text/css">

        body
        {

            font-family:  Arial, Helvetica, Univers;
            font-size: 10pt;
            font-style: normal;
            font-weight: normal;
            line-height: 12pt;
            text-align: left;
        }

        b
        {
            font-weight: bold;
        }

    table
    {
        border-collapse: collapse;
    }

    div.tableContainer
    {
        font-size: 8pt;
        width: 100%;
        overflow: auto;
    }

    div.tableContainer th
    {
        font-size: 8pt;
        font-weight: normal;
        text-decoration: underline;
        text-align: center;
        background-color: #BBC3E2;
        color: #000000;
        border-color: #808080;
        border-style: solid;
        border-width: 1px;
        position: relative;
        padding-right: 3;
        padding-left: 3;
        cursor: default;
    }

    div.tableContainer td
    {
        font-size: 9pt;
        text-align: right;
        white-space: nowrap;
        background-color: #F1EEE3;
        color: #000000;
        border-color: #808080;
        border-style: solid;
        border-width: 1px;
        position: relative;
        padding-right: 3px;
        padding-left: 3px;
    }

    div.tableContainer td.locked, div.tableContainer th.locked
    {
        background-color: #BBC3E2;
        text-align: left;
        color: #000000;
        position: relative;
        text-decoration: none;
    }

    div.tableContainer tr.total
    {
    font-weight: bold;
    }

        </style>
    <body>

    <div class="tableContainer" id="data">
Day<br>Sales<br>Details<br><br>
<table border="0" cellspacing="0" cellpadding="0" style="width: auto">
<tbody>
<tr><th class="locked">&nbsp;</th><th>Value<br>1</th><th>Value<br>2</th><th>VAlue<br>3</th><th>Value</th><th>Value</th><th>Value</th><th>Value<br>value</th><th>value<br>value</th><th>value<br>$</th><th>value<br>value</th></tr>
<tr><td class="locked">-Line1</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>0</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">--Line2</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>2</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">--Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>1</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">--Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>####</td><td>0.0</td><td>3</td><td>0.0</td><td>0%</td><td>11</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>6</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>4</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>-</td><td>0.0</td><td>0</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>1</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>2</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>1</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>7</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>8</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>8</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td class="locked"><b>Line3</b></td><td><b>0.0</b></td><td><b>0.0</b></td><td><b>0.0</b></td><td><b>0%</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0%</b></td></tr>

</tbody>
</table>
Day<br>Sales<br>Details<br><br>
<table border="0" cellspacing="0" cellpadding="0" style="width: auto">
<tbody>
<tr><th class="locked">&nbsp;</th><th>Value<br>1</th><th>Value<br>2</th><th>VAlue<br>3</th><th>Value</th><th>Value</th><th>Value</th><th>Value<br>value</th><th>value<br>value</th><th>value<br>$</th><th>value<br>value</th></tr>
<tr><td class="locked">-Line1</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>0</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">--Line2</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>2</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">--Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>1</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">--Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>####</td><td>0.0</td><td>3</td><td>0.0</td><td>0%</td><td>11</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>6</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>4</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>-</td><td>0.0</td><td>0</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>1</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>2</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>1</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">-Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>7</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>8</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">Line3</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0%</td><td>0.0</td><td>8</td><td>0.0</td><td>0%</td><td>0</td><td>0%</td></tr>
<tr><td class="locked">&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td class="locked"><b>Line3</b></td><td><b>0.0</b></td><td><b>0.0</b></td><td><b>0.0</b></td><td><b>0%</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0</b></td><td><b>0%</b></td></tr>

</tbody>
</table>

<br>data is effective for close of previous business day<br>
</div>

</body>
</html>

2 个答案:

答案 0 :(得分:1)

问题在于:

Content-Encoding: gzip

的东西;您的ISP,POP服务器,甚至SmtpClient.Send正在GZipping HTTP有效负载。这在HTTP中是允许的。从Server: Apache/2.2.21 (CentOS)我怀疑它是HTTP服务器。

任何兼容的HTTP客户端都应该在使用此标头收到时解压缩有效负载。标准的.NET HttpClient类将执行此操作。

什么是“收到”电子邮件?你写的一个程序?它必须取消GZip有效载荷。或者联系您的服务器管理员,看看是否有某种方法可以告诉它不要使用GZip大型有效负载。

答案 1 :(得分:0)

感谢大家的帮助。我发现了造成这个问题的原因,虽然我不确定为什么这会解决这个问题。当我将代码更改为使用七位编码时,它会毫无问题地发送电子邮件。我很想知道解决这个问题的原因。感觉像是乐队援助修复。它必须与交换有关。也不知道为什么即使不发送附件我也会收到乱码。这是要修复的代码:

            Attachment attachment = new Attachment(this.Attachment);
            attachment.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
            mail.Attachments.Add(attachment);