c#:发送带服务器本地图片的邮件,附件在邮件中可以不显示,比如logo图片

我们在发送邮件时,一般图片都是用网络路径,但有时如果接收方不可直接访问外网,就不能看到图片了,比如公司内部邮件,跟外界就没法交流图片。

那么我们就来把图片嵌入邮件中;查看人就没有限制了。

1。以linked的方式,此方式在邮件中不会出现图片的附件

 

 

邮件内容调用图片格式为:<img src=\"cid:Email001\">

发送邮件的服务端代码为:

SmtpClient 发送邮件的对象

 

折叠C# 代码
  1. System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();      
  2. mailMessage.From="发送者邮箱";      
  3. mailMessage.To.Add("收件人邮件列表");      
  4. mailMessage.CC.Add("抄送人邮件列表");      
  5. mailMessage.Subject = subject;      
  6. AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(content,null,"text/html");      
  7. LinkedResource lrImage = new LinkedResource("a.jpg","image/gif");      
  8. lrImage.ContentId = "Email001";      
  9. htmlBody.LinkedResources.Add(lrImage);      
  10. mailMessage.AlternateViews.Add(htmlBody);      
  11. SmtpClient.Send(mailMessage);     

例程:

折叠C# 代码
  1.             SmtpClient smtp = new SmtpClient();   
  2.             smtp.DeliveryMethod = SmtpDeliveryMethod.Network;   
  3.             smtp.Host = "smtp.163.com";   
  4.             smtp.Credentials = new NetworkCredential("renzhijie1111", "**");   
  5.   
  6.             MailMessage mm = new MailMessage();   
  7.             mm.From = new MailAddress("test@163.com", "test");   
  8.             mm.To.Add("test2@163.com");   
  9.   
  10.             mm.Subject = "测试图片邮件";   
  11.   
  12.             string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";   
  13.             mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));   
  14.   
  15.             ////HTML格式邮件的内容   
  16.             string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";   
  17.             htmlBodyContent += "<a href=\"http://www.fenbi360.net粉笔编程网</a> <img src=\"cid:weblogo\">";   //注意此处嵌入的图片资源   
  18.             AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");   
  19.   
  20.               
  21.             LinkedResource lrImage = new LinkedResource(@"d:\1.jpg", "image/gif");   
  22.             lrImage.ContentId = "weblogo"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片   
  23.             htmlBody.LinkedResources.Add(lrImage);   
  24.   
  25.             mm.AlternateViews.Add(htmlBody);   
  26.   
  27.             ////要求回执的标志   
  28.             mm.Headers.Add("Disposition-Notification-To", "test@163.com");   
  29.   
  30.             ////自定义邮件头   
  31.             mm.Headers.Add("X-Website", "http://www.fenbi360.net");   
  32.   
  33.             ////针对 LOTUS DOMINO SERVER,插入回执头   
  34.             mm.Headers.Add("ReturnReceipt", "1");   
  35.   
  36.             mm.Priority = MailPriority.Normal; //优先级   
  37.             mm.ReplyTo = new MailAddress("test2@163.com", "我自己");   
  38.   
  39.             ////如果发送失败,SMTP 服务器将发送 失败邮件告诉我   
  40.             mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;   
  41.   
  42.             ////异步发送完成时的处理事件   
  43.             smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);   
  44.   
  45.             ////开始异步发送   
  46.             smtp.SendAsync(mm, null);   
  47.   
  48.   
  49.   
  50.   
  51.   
  52. void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e)   
  53.         {   
  54.             if (e.Cancelled)   
  55.             {   
  56.                 MessageBox.Show("发送被取消");   
  57.             }   
  58.             else  
  59.             {   
  60.                 if (e.Error == null)   
  61.                 {   
  62.                     MessageBox.Show("发送成功");   
  63.                 }   
  64.                 else  
  65.                 {   
  66.                     MessageBox.Show("发送失败: " + e.Error.Message);   
  67.                 }   
  68.             }   
  69.         }   

2。以邮件附件的方式,此方式图片当附件发送,并会显示在邮件内容中。

如图:

 

其它代码就不多贴了。跟上面一样。只是换成附件方式:

折叠C# 代码
  1. string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";      
  2. htmlBodyContent += "<a href=\"testimg\"></a> <img src=\"cid:webimg\">";   //注意此处嵌入的图片资源      
  3.          
  4. System.Net.Mail.Attachment att = new Attachment(@"E:\ttt.gif");      
  5. att.ContentId = "webimg";     

 

 

例程一

 

邮件内容调用图片格式为:<img src=\"cid:Email001\">

发送邮件的服务端代码为:

SmtpClient 发送邮件的对象 //代码省略


System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
mailMessage.From="发送者邮箱";
mailMessage.To.Add("收件人邮件列表");
mailMessage.CC.Add("抄送人邮件列表");
mailMessage.Subject = subject;
AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(content,null,"text/html");
LinkedResource lrImage = new LinkedResource("a.jpg","image/gif");
lrImage.ContentId = "Email001";
htmlBody.LinkedResources.Add(lrImage);
mailMessage.AlternateViews.Add(htmlBody);
SmtpClient.Send(mailMessage);

--------------------------------------------------------------------------------------------------------------

 

例程二

SmtpClient smtp = new SmtpClient();
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
            smtp.Host = "smtp.163.com";
            smtp.Credentials = new NetworkCredential("renzhijie1111", "**");

            MailMessage mm = new MailMessage();
            mm.From = new MailAddress("renzhijie1111@163.com", "无敌任志杰测试");
            mm.To.Add("renzhijie1990@vip.qq.com");

            mm.Subject = "发送带图片邮件";

            string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";
            mm.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));

            ////HTML格式邮件的内容
            string htmlBodyContent = "如果你的看到<b>这个</b>, 说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";
            htmlBodyContent += "<a href=\"http://www.vayule.com/\">VA娱乐网</a> <img src=\"cid:weblogo\">";   //注意此处嵌入的图片资源
            AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");

           
            LinkedResource lrImage = new LinkedResource(@"d:\1.jpg", "image/gif");
            lrImage.ContentId = "weblogo"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片
            htmlBody.LinkedResources.Add(lrImage);

            mm.AlternateViews.Add(htmlBody);

            ////要求回执的标志
            mm.Headers.Add("Disposition-Notification-To", "renzhijie1111@163.com");

            ////自定义邮件头
            mm.Headers.Add("X-Website", "http://www.vayule.com/");

            ////针对 LOTUS DOMINO SERVER,插入回执头
            mm.Headers.Add("ReturnReceipt", "1");

            mm.Priority = MailPriority.Normal; //优先级
            mm.ReplyTo = new MailAddress("renzhijie1111@163.com", "我自己");

            ////如果发送失败,SMTP 服务器将发送 失败邮件告诉我
            mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

            ////异步发送完成时的处理事件
            smtp.SendCompleted += new SendCompletedEventHandler(smtp_SendCompleted);

            ////开始异步发送
            smtp.SendAsync(mm, null);





void smtp_SendCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                MessageBox.Show("发送被取消");
            }
            else
            {
                if (e.Error == null)
                {
                    MessageBox.Show("发送成功");
                }
                else
                {
                    MessageBox.Show("发送失败: " + e.Error.Message);
                }
            }
        }

 

 

 

使用SMTP发送邮件
发送的邮件为本地html文件,html中的图片为本地图片

主体函数,根据传入的bool参数发送不同的模板

internal class FeedbackMail
{
    public MailMessage mailMessage = new MailMessage();
    public SmtpClient smtpClient;
    public int senderPort = 587;
    public String senderServerHost = "mail.abc.com";
    public String senderPassword = "abc";
    public String senderUsername = "aaa";

    public void SendMail(Boolean isSuccess)
    {
        String[] members = XmlReader.GetElementFromXml("SendMailTo").Split(';');
        foreach (var member in members)
        {
            mailMessage.To.Add(member);
        }
        mailMessage.From = new MailAddress("abc@abc.com");
        mailMessage.Subject = "EmailTest";
        AlternateView htmlBody;
        if (isSuccess)
        {
            var reader = new StreamReader(@"C:\MailForSuccess.html", Encoding.Default);
            var mailBody = reader.ReadToEnd().ToString();
            htmlBody = AlternateView.CreateAlternateViewFromString(mailBody, null, "text/html");
        }
        else
        {
            var reader = new StreamReader(@"C:\MailForFailure.html", Encoding.Default);
            var mailBody = reader.ReadToEnd().ToString();
            htmlBody = AlternateView.CreateAlternateViewFromString(mailBody, null, "text/html");
        }
        LinkedResource lrImage = new LinkedResource(@"C:\AvePoint.png", "image/gif");
        LinkedResource lrImage2 = new LinkedResource(@"C:\MSPartner.png", "image/gif");
        lrImage.ContentId = "AvePoint";
        lrImage2.ContentId = "MSPartner";
        htmlBody.LinkedResources.Add(lrImage);
        htmlBody.LinkedResources.Add(lrImage2);
        mailMessage.AlternateViews.Add(htmlBody);
        mailMessage.IsBodyHtml = true;
        mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
        mailMessage.Priority = MailPriority.Normal;
        Send();
    }

    public void Send()
    {
        try
        {
            if (mailMessage != null)
            {
                smtpClient = new SmtpClient();
                smtpClient.Host = senderServerHost;
                smtpClient.Port = senderPort;
                smtpClient.UseDefaultCredentials = false;

                smtpClient.Credentials = new System.Net.NetworkCredential(senderUsername, senderPassword);

                smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
                smtpClient.Send(mailMessage);
                Console.WriteLine("Send Success");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Send Fail");
            Console.WriteLine(ex.Message);
        }
    }
}

posted on 2020-08-14 18:05  itjeff  阅读(776)  评论(0编辑  收藏  举报

导航