C#mvc2在代码中创建纯文本电子邮件

时间:2011-02-04 07:23:36

标签: c# asp.net asp.net-mvc email plaintext

我需要在代码中创建一个普通测试电子邮件。这是必需的,因为电子邮件中的信息将由应用程序读取。

我在常量字符串中创建了以下值作为我的电子邮件的设置。这些是我想要在电子邮件中的字段,因为应用程序需要它们。

public static string TestMail = @"
[Begin Message]
Name = {0}
Phone = {1}
Postalcode = {2}
HomeNumber = {3}
[End message]";

使用以下代码发送电子邮件时,需要从电子邮件中读取信息的应用程序按以下方式接收;

=0D=0A        [Begin Message]=0D=0A        Name =3D nam=
e=0D=0A        Phone =3D 0612345678=0D=0A        Postalcode =3D =
1234ab=0D=0A        HomeNumber =3D 5=0D=0A        [End messa=
ge]=0D=0A       =20

我用来发送此电子邮件的代码如下:

var mailBody = String.Format(Constants.TestMail, name, phone, postalCode, homeNumber);

var mail = new MailMessage
{
    Subject = Constants.Subject,
    Body = mailBody,
    IsBodyHtml = false,
};

mail.To.Add(receveiver);

var smtpClient = new SmtpClient();
smtpClient.Send(mail);

这不是我预期的结果,经过深入挖掘后我发现问题在于它似乎仍然是HTML电子邮件,而我需要它是纯文本。在阅读有关此问题的同时,我在互联网上的VB.net中找到了this示例。所以我将常量修改为下面的常量;

public static string TestMail = @"[Begin message]\r\nName = {0}\r\nPhone = {1}\r\nPostalcode = {2}\r\nHomenumber = {3}\r\n[End message]";

然后我使用以下代码创建并将电子邮件发送给我的客户端(在outlook中测试)

var mail = new MailMessage
{
    Subject = Constants.Subject,
};
var alternateView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(mailBody, Encoding.ASCII,"text/plain");

mail.AlternateViews.Add(alternateView);

mail.To.Add(receveiver);

var smtpClient = new SmtpClient();
smtpClient.Send(mail);

运行此代码后,我收到一封包含以下内容的Outlook(目前无法测试该应用程序)的电子邮件;

[Start message]\r\nName = John\r\nPhone = 0612345678\r\nPostalcode = 1234ab\r\nHomeNumber = 5\r\n[End Message]

最后的结果对我来说似乎不是一封纯文本邮件。只是2007年的Outlook有问题才能显示电子邮件吗?还是我还缺少什么?我希望有人可以帮助我,并告诉我出了什么问题。

1 个答案:

答案 0 :(得分:4)

你应该删除@字符,因为它会正确处理escape characters。如果你有@那么所有转义字符都被视为纯文本而不是新行等。