我使用.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"> </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"> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </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"> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </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"> </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"> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </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"> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </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>
答案 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);