0

我正在使用三个类来发送电子邮件,但我不能将文本电子邮件与图像结合起来,或者只是发送图像。当我收到电子邮件时,我看到空图像。帮助我更改我的代码,以便我可以发送电子邮件:

  1. 文本
  2. 图片
  3. 和风格

       public class SendService : IDistributionProvider
     {
       public int Send(System.Xml.Linq.XDocument recipientsData, string subject, string fromName, string fromAccount)
    {
        foreach (XElement element in recipientsData.Root.Elements())
        {
            string email = element.Element("email").Value;
            string name = element.Element("name").Value;
            string message = element.Element("message").Value;
    
            bool result = EmailUtils.SendEmail(fromAccount, fromName, email, name, subject, message.Replace("\n", "<br/>"));
        }
    
        return 1;
    }
    
    
    public interface IDistributionProvider
    {
    int Send(XDocument recipientsData, string subject, string fromName, 
     string fromAccount);
    }
    
    
    public static class EmailUtils
    {
     private static string sendHostName;
     private static int sendPort;
     private static string userName;
     private static string password;
     private static string defaultFromEmail;
     private static string defaultFromName;
    
     static EmailUtils()
     {
        sendHostName = ConfigurationManager.AppSettings["sendHostName"];
        sendPort = int.Parse(ConfigurationManager.AppSettings["sendPort"]);
        defaultFromEmail = ConfigurationManager.AppSettings["fromEmail"];
        defaultFromName = ConfigurationManager.AppSettings["fromName"];
    
        string credential = Utils.DecryptString(ConfigurationManager.AppSettings["credential"]);
        if (!string.IsNullOrEmpty(credential) && credential.Split(";".ToCharArray()).Length > 1)
        {
            userName = credential.Split(";".ToCharArray())[0];
            password = credential.Split(";".ToCharArray())[1];
        }
    }
    
    public static bool SendEmail(string toEmail, string toName, string subject, string body)
    {
        return SendEmail(defaultFromEmail, defaultFromName, toEmail, toName, subject, body);
    }
    
    public static bool SendEmail(string fromEmail, string fromName, string toEmail, string toName, string subject, string body)
    {
        try
        {
            if (string.IsNullOrEmpty(toEmail))
            {
                return false;
            }
    
            if (string.IsNullOrEmpty(toName))
            {
                toName = toEmail.Substring(0, toEmail.IndexOf("@"));
            }
    
            if (string.IsNullOrEmpty(fromEmail))
            {
                fromEmail = defaultFromEmail;
            }
    
            if (string.IsNullOrEmpty(fromName))
            {
                fromName = defaultFromName;
            }
    
            Message message = new Message();
            message.Charset = "UTF-8";
            message.Subject = Codec.RFC2047Encode(subject, "UTF-8");
            message.From = new Address(fromEmail, fromName);
            message.To.Add(toEmail, toName);
            message.BodyHtml.Format = BodyFormat.Html;
            message.BodyHtml.Charset = "UTF-8";
            message.BodyHtml.Text = body;
    
            return ActiveUp.Net.Mail.SmtpClient.SendSsl(message, sendHostName, sendPort, userName, password, SaslMechanism.Login);
        }
        catch
        {
            return false;
        }
    }
    

    }

通过这种方式,我发送电子邮件 - 只是文本:

 string bodyEmail = "<h2>Welcome to website</h2></br><div><p>Thank for using website</p></div>";

        EmailUtils.SendEmail("xxx@gmail.com","xxxx","Contact",bodyEmail);
4

2 回答 2

2

最简单的方法是使用数据 URI 内联图像。

您基本上将图像内联到消息的 HTML 中。只需按照格式

data:[<MIME-type>][;charset=<encoding>][;base64]

其中 mime-type 可以是 image/jpeg,charset 应该是 ASCII,并且图像的字节转换为 base64。您可以通过从磁盘读取图像文件的字节来获得它

byte[] imaeg = File.ReadAllBytes("nekkedladies.jpg");

然后将字节数组转换为 base 64 字符串

var base64Imaeg = System.Convert.ToBase64String(imaeg);

把它拍在一起,贴在你的 html 中(从 wiki 偷来的)

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 9TXL0Y4OHwAAAABJRU5ErkJggg=="alt="Nekkid Ladies" />

顺便说一句,示例图像数据不是 nekkid 女士。是这样的:

女士们
对不起

于 2015-01-27T19:59:27.587 回答
0

我实际上遇到了同样的问题,真正帮助我的是这个。就我而言,我有 html,我必须使用HtmlUtilityPack解析它。我不建议使用编码字符串,因为它不完全受支持,它会使您的消息变得臃肿。cid 方式也是 Outlook 如何将图像添加到电子邮件的方式。我会添加代码,但我认为这个例子对我来说已经足够好了。

于 2015-01-27T22:00:04.153 回答