使用C#中的SmtpClient发送电子邮件出现问题

4

我有一个ASP.Net/MVC应用程序,我正在尝试发送HTML邮件。 我通过读取带有令牌的HTML文件来实现这一点,然后替换令牌。 那部分很好,并生成了我想要的HTML,但是当我发送电子邮件时,我收到的内容看起来像-

<style type=3D"text/css">=
=0D=0A.styleTitles=0D=0A{=0D=0Afont-weight:=bold;=0D=0A}=0D=0A 
.style1=0D=0A        {=0D=0A 

并且应该看起来像
    <style type="text/css">
    .styleTitles
    {
        font-weight: bold;
    }
    .style1
    {
        height: 15px;
    }

我在网上搜索了一下,但似乎找不到正确的语法来发送消息。我看到了一些解决方案,但都没有起作用。

我的当前测试代码是 -

SmtpClient smtpclient = new SmtpClient();
MailMessage message = new MailMessage();

MailAddress SendFrom = new MailAddress("xxxx@abc.com");
MailAddress SendTo = new MailAddress("zzzz@gmail.com");
MailMessage MyMessage = new MailMessage(SendFrom, SendTo);

var plainView = AlternateView.CreateAlternateViewFromString(msgBody,null,"text/html");
plainView.TransferEncoding = System.Net.Mime.TransferEncoding.SevenBit;
MyMessage.AlternateViews.Add(plainView);
MyMessage.IsBodyHtml = true;
MyMessage.Subject = subjectLine;
MyMessage.Body = msgBody;
smtpclient.Send(MyMessage);

有什么建议吗?
6个回答

6
也许可以这样做:
var plainView = AlternateView.CreateAlternateViewFromString(msgBody, new ContentType("text/plain; charset=UTF-8"));

MyMessage.AlternateViews.Add(plainView);
MyMessage.BodyEncoding = Encoding.UTF8;
MyMessage.IsBodyHtml = true;
MyMessage.Subject = subjectLine;
MyMessage.Body = msgBody;

这导致消息以base64编码发送,看起来它能够工作。谢谢。 我已经追踪到真正的问题是默认情况下“Content-Transfer-Encoding: quoted-printable”设置会导致所有问题。quoted-printable旨在将\n替换为=0D,\r替换为=0A,=替换为=3D。我还没有找到一种好的方法来更改传输编码,使其成为8位,这将更简单。无论如何。谢谢。 - photo_tom

3
要将传输编码设置为8位,可以参考此处的方法:链接,您需要执行以下步骤:
message.Body = null;
using (AlternateView body =
AlternateView.CreateAlternateViewFromString(
    "Some Message Body",
    message.BodyEncoding,
    message.IsBodyHtml ? "text/html" : null))
{
body.TransferEncoding = 
    TransferEncoding.SevenBit;
message.AlternateViews.Add(body);
}

3

尝试进行以下更改:

plainView.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;

似乎没有任何效果。 - photo_tom

0

很奇怪,但更简单的代码对我有效:

var message = new MailMessage(Email, mailTo);
message.IsBodyHtml = true;
message.SubjectEncoding = message.BodyEncoding = Encoding.UTF8;
message.Subject = "Subject";
message.Body = msgBody;
smtpclient.Send(message);

0

这可能不是你需要的答案,但你考虑过使用XSLT来翻译你的电子邮件吗?我正在忙于一个发送电子邮件的项目,使用XSLT作为解决方案的一部分非常好。这也意味着将来模板可以轻松地以行业标准化的方式进行定制,也许你应该考虑做出改变?


你说得有道理,但是代码已经比客户想要的好得多了。所以重写并不是必要的。 不过,我会记住这点,为我的下一个项目做准备。 - photo_tom

-1
string emailMessage="a skjdhak kdkand"; 
MailMessage mail = new MailMessage();
                    mail.To.Add(obj_Artist.EmailAddress);
                    mail.From = new MailAddress(EmailList[0].FromEmail, "Sentric Music - Rights Management");
                       mail.Subject = (EmailList[0].Subject);

                    if (EmailList[0].BCC1 != null && EmailList[0].BCC1 != string.Empty)
                    {
                        mail.Bcc.Add(EmailList[0].BCC1);
                    }
                    if (EmailList[0].BCC2 != null && EmailList[0].BCC2 != string.Empty)
                    {
                        mail.Bcc.Add(EmailList[0].BCC2);
                    }
                    if (EmailList[0].CC1 != null && EmailList[0].CC1 != string.Empty)
                    {
                        mail.CC.Add(EmailList[0].CC1);
                    }
                    if (EmailList[0].CC2 != null && EmailList[0].CC2 != string.Empty)
                    {
                        mail.CC.Add(EmailList[0].CC2);`enter code here`
                    }


                    string Body = emailMessage;


                    mail.Body = Body;
                    mail.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");
                    mail.IsBodyHtml = true;
                    AlternateView plainView = AlternateView.CreateAlternateViewFromString
                    (System.Text.RegularExpressions.Regex.Replace(Body, @"<(.|\n)*?>", string.Empty), null, "text/plain");
                    System.Net.Mail.AlternateView htmlView = System.Net.Mail.AlternateView.CreateAlternateViewFromString(Body, null, "text/html");
                    mail.AlternateViews.Add(plainView);
                    mail.AlternateViews.Add(htmlView);
                    SmtpClient smtp = new SmtpClient();
                    smtp.EnableSsl = true;
                    smtp.Send(mail);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接