代码之家  ›  专栏  ›  技术社区  ›  photo_tom

在C中使用smtpclient发送电子邮件时出现问题#

  •  4
  • photo_tom  · 技术社区  · 15 年前

    我有一个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 回复  |  直到 11 年前
        1
  •  6
  •   ParmesanCodice    15 年前

    可能是这样的:

    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;
    
        2
  •  3
  •   Keith Adler    15 年前

    尝试此更改:

    plainView.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
    
        3
  •  3
  •   Gary W    15 年前

    将传输编码设置为8位,取自 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
  •  0
  •   JL. Hans Passant    15 年前

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

        5
  •  0
  •   Vetal    13 年前

    这很奇怪,但对我来说更简单的代码是可行的:

    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
  •  -1
  •   Muhammad Hussain    12 年前
    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);