如何使用c# 实现邮件发送功能 ,以及如何向邮件内容添加图片

1.添加引用: 

using System.Net.Mail;
using System.Net;//验证发件人发件人邮箱需要用到NetworkCredential

2.创建发送邮件的方法(如果有多个收件人或者抄送人,先将收件人用特殊符号拼接,再用split切割成数组然后循环添加就好了)

具体看如下代码:

 public string sendmail(string toMail, string subject)
        {
            string user = "[email protected]";//发件人,这边也可以自定义
            string passw = "xxx";//密码
            string Suffix = "";     //邮箱后缀
            int port = 587;         //端口号
            string smtp = "smtp..net";

            Suffix = user.Substring(user.IndexOf('@'));

            if (Suffix == "@qindatech.com")
            {
                smtp = "smtp.qiye.163.com";
            }
            else if (Suffix == "@51techservice.com")
            {
                smtp = "smtp.mxhichina.com";
            }
            else if (Suffix == "@qq.com")
            {
                smtp = "smtp.qq.com";
            }
            else if (Suffix == "@sh-teru.com")
            {
                smtp = "smtp.exmail.qq.com";
            }
            //实例化一个发送邮件类。
            System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
            //发件人邮箱地址,方法重载不同,可以根据需求自行选择。
            mailMessage.From = new MailAddress(user);
            //收件人邮箱地址。
            //这边收件人是用;进行拼接
            if (toMail.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Length > 1)
            {
                //如果有多个
                foreach (var address in toMail.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
                {
                    mailMessage.To.Add(address);
                }
            }
            else
            {
                mailMessage.To.Add(new MailAddress(toMail));
            }
               //抄送人
                if (chaosong.Split(new[] { ";"},StringSplitOptions.RemoveEmptyEntries).Length>1)
                {
                    foreach (var chaosong1 in chaosong.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
                    {
                        mailMessage.CC.Add(chaosong1);
                    }
                }
                else if (chaosong=="")
                {
                }
                else
                {
                    mailMessage.CC.Add(new MailAddress(chaosong));
                }
            //邮件标题。
            mailMessage.Subject = subject;
            //邮件内容
            mailMessage.Body = "";
            //邮件内容。
            //实例化一个SmtpClient类。
            SmtpClient client = new SmtpClient();
            //服务器端口
            client.Port = port;
            //勤达邮箱服务器
            client.Host = smtp;
            //使用安全加密连接。
            client.EnableSsl = true;
            //不和请求一块发送。
            client.UseDefaultCredentials = false;
            //验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
            client.Credentials = new NetworkCredential(user, passw);
             //发送附件
            mailMessage.Attachments.Add(new Attachment(xlsx));
            try
            {
                client.Send(mailMessage);
                mailMessage.Dispose();                    //关闭邮件使用的所有进程
                return "send success";
            }
            catch (Exception e)
            {
                string a = e.Message;
                mailMessage.Dispose();                    //关闭邮件使用的所有进程
                return "send error";
            }
        }

弊端就是MailMessage没有邮件签名的方法

所以,可以在邮件内容中附加邮件签名

然后就涉及到一个问题,邮件内容附加图片怎么解决,不用担心,下面就是向邮件内容中添加图片的解决办法啦

 //先将要处理的图片作为附件添加
    System.Net.Mail.Attachment attachment = 
   new System.Net.Mail.Attachment
   (@"C:\Users\Administrator\Desktop\fin_bg2.png");
        message.Attachments.Add(attachment);
        //相当与邮件内容定义成html
        message.IsBodyHtml = true;
        //这边邮件的内容就可以用html标签(img)来插入图片
        //attachment.contendid为附件固定的id
        //cid:邮件BASE64编码的某个位置.然后从这个位置上读图片的数据
        message.Body += "<img src=\"cid:" + attachment.ContentId + "\"/>";

 注意:

1:如果使用qq发送的话,会报错“mail from address must be same as authorization user”,

这里代码是没有错的,只是你的qq邮箱没有开启下面这两个服务:

此时进入到网页版QQ邮箱,邮箱首页旁边有个设置超链接,再点账户,翻到POP3/IMAP/SMTP/Exchange服务,把前两个勾打上保存一下就可以发邮件了!

这边会要求你发送一封短信,发送后,会给你一串类似密钥的东西,将你程序中的密码替换成它就行啦

2、这边使用换行可以用</br>换行,但内容换行后,行间距会变得很大,可以调整行高度达到自己想要的效果,css:line-height:xxpx;

各邮箱端口号以及smtp服务器:

https://blog.csdn.net/u014449653/article/details/78816567

smtp 和pop3的区别

smtp可以理解成寄信的,而且大多数smtp服务器是免费的

而pop服务器则是用来收信的,而且每个Email地址只能有一个

 

发布了13 篇原创文章 · 获赞 1 · 访问量 2927

猜你喜欢

转载自blog.csdn.net/huxinyu0208/article/details/90553686