【问题标题】:Problem sending email with SmtpClient in C#在 C# 中使用 SmtpClient 发送电子邮件时出现问题
【发布时间】:2009-09-21 20:57:28
【问题描述】:

我有一个 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);

有什么建议吗?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    可能是这样的:

    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 编码发送,并且似乎可以正常工作。谢谢我已经追踪到真正的问题,因为默认情况下“内容传输编码:引用打印”设置会导致所有问题。带引号的可打印对象旨在将 \n 替换为 =0D,将 \r 替换为 =0A 并将 = 替换为 =3D。我还没有找到一个很好的方法来改变传输编码,使它是 8bit,这样会更简单。反正。谢谢。
    【解决方案2】:

    试试这个改变:

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

    【讨论】:

    • 好像没有任何效果
    【解决方案3】:

    要将传输编码设置为 8bit,取自 here,您必须:

    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);
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 您说得有道理,但代码已经运行得比客户想要的要好得多。所以重写不是真的。但是,我会在下一个项目中记住这一点
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:
        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);
        

        【讨论】:

          猜你喜欢
          • 2022-06-13
          • 1970-01-01
          • 2014-09-15
          • 2011-07-03
          • 1970-01-01
          • 2021-06-23
          • 1970-01-01
          相关资源
          最近更新 更多