3

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

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

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 电子邮件,而我需要它是纯文本的。在阅读有关此问题的信息时,我在 Internet 上的 VB.net 中找到了此示例。所以我将常量修改为下面的常量;

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]

最后一个结果对我来说似乎不是纯文本电子邮件。只是outlook 2007显示电子邮件有问题吗?还是我还缺少什么?我希望有人可以在这里帮助我并告诉我出了什么问题。

4

1 回答 1

4

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

于 2011-02-04T08:37:10.833 回答