浅谈:ASP.NET中使用System.Net.Mail发邮件

public static void SendMail()//普通的邮件发送
{
    MailAddress from = new MailAddress("FromEmail@website.com");
    MailAddress to = new MailAddress("ToEmail@website.com");
    MailMessage message = new MailMessage(from, to);
    message.Subject = "邮件标题";
    message.Body = "邮件内容";
    MailAddress copy = new MailAddress("mailto:CopyToEmail@website.com");
    message.CC.Add(copy);
    SmtpClient client = new SmtpClient("SMTP Server");

    client.Credentials = CredentialCache.DefaultNetworkCredentials;
    client.Send(message);
}

二、带HTML格式的Email发送

public static void SendMail()//带HTML的邮件发送
{
    MailAddress from = new MailAddress("FromEmail@website.com");
    MailAddress to = new MailAddress("ToEmail@website.com");
    MailMessage message = new MailMessage(from, to);
    message.Subject = "邮件标题";

    string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));
    string htmlBodyContent = "如果你的看到<b>这个</b>,说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";
    htmlBodyContent += "<a href=\"http://www.baidu.com//">百度一下</a>";
    AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");
    message.AlternateViews.Add(htmlBody);

    MailAddress copy = new MailAddress("mailto:CopyToEmail@website.com ");
    message.CC.Add(copy);
    SmtpClient client = new SmtpClient("SMTP Server");

    client.Credentials = CredentialCache.DefaultNetworkCredentials;
    client.Send(message);
}

三、带附件的邮件

public static void SendMail()//带HTML的邮件发送
{
    MailAddress from = new MailAddress("FromEmail@website.com");
    MailAddress to = new MailAddress("ToEmail@website.com");
    MailMessage message = new MailMessage(from, to);
    message.Subject = "邮件标题";

    string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));
    string htmlBodyContent = "如果你的看到<b>这个</b>,说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";
    htmlBodyContent += "<a href=\"http://www.baidu.com//">百度一下</a>";
    AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");
    message.AlternateViews.Add(htmlBody);

    Attachment attachment = new Attachment("C:\\附件.rar");
    message.Attachments.Add(attachment);

    MailAddress copy = new MailAddress("mailto:CopyToEmail@website.com");
    message.CC.Add(copy);
    SmtpClient client = new SmtpClient("SMTP Server");

    client.Credentials = CredentialCache.DefaultNetworkCredentials;
    client.Send(message);
}

四、邮件为HTML,而且带图片

public static void SendMail()//带HTML,并且HTML中有图片的邮件发送
{
    MailAddress from = new MailAddress("FromEmail@website.com");
    MailAddress to = new MailAddress("ToEmail@website.com");

    MailMessage message = new MailMessage(from, to);
    message.Subject = "邮件标题";

    string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));
    string htmlBodyContent = "如果你的看到<b>这个</b>,说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";
    htmlBodyContent += "<a href=\"http://www.baidu.com//">百度一下</a><img src=\"cid:imageInEmail\"/>";
    AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");
   
    LinkedResource lrImage = new LinkedResource("C:\\图片.jpg", System.Net.Mime.MediaTypeNames.Image.Jpeg);
    lrImage.ContentId = "imageInEmail"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片
    htmlBody.LinkedResources.Add(lrImage);

    message.AlternateViews.Add(htmlBody);

    MailAddress copy = new MailAddress("mailto:CopyToEmail@website.com");
    message.CC.Add(copy);
    SmtpClient client = new SmtpClient("SMTP Server");

    client.Credentials = CredentialCache.DefaultNetworkCredentials;
    client.Send(message);
}

五、图片为动态生成

public static void SendMail()//带HTML,并且HTML中有图片的邮件发送
{
    MailAddress from = new MailAddress("FromEmail@website.com");
    MailAddress to = new MailAddress("ToEmail@website.com");
    MailMessage message = new MailMessage(from, to);
    message.Subject = "邮件标题";

    string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";
    message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));
    string htmlBodyContent = "如果你的看到<b>这个</b>,说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";
    htmlBodyContent += "<a href=\"http://www.baidu.com//">百度一下</a><img src=\"cid:imageInEmail\"/>";
    AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");

    MemoryStream imgStream = GetImage();
    imgStream.Position = 0;//非常重要,否则图片为空!在邮件里显示红叉
    LinkedResource lrImage = new LinkedResource(imgStream, System.Net.Mime.MediaTypeNames.Image.Jpeg);
    lrImage.ContentId = "imageInEmail"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片
    htmlBody.LinkedResources.Add(lrImage);

    message.AlternateViews.Add(htmlBody);

    MailAddress copy = new MailAddress("mailto:CopyToEmail@website.com");
    message.CC.Add(copy);
    SmtpClient client = new SmtpClient("SMTP Server");

    client.Credentials = CredentialCache.DefaultNetworkCredentials;
    client.Send(message);
}

public static MemoryStream GetImage()
{
    //Code here... ...
}
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Mail;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Mime;

namespace BI.MailService.Mail
{
    public class BIMailService
    {
        SmtpClient SmtpClient = null;   //设置SMTP协议
        MailAddress MailAddress_from = null; //设置发信人地址  当然还需要密码
        MailAddress MailAddress_to = null;  //设置收信人地址  不需要密码
        MailMessage MailMessage_Mai = null;
        FileStream FileStream_my = null; //附件文件流


        #region 设置Smtp服务器信息
        /// <summary>
        /// 设置Smtp服务器信息
        /// </summary>
        /// <param name="ServerName">SMTP服务名</param>
        /// <param name="Port">端口号</param>
        private void setSmtpClient(string ServerHost, int Port)
        {
            SmtpClient = new SmtpClient();
            SmtpClient.Host = ServerHost;//指定SMTP服务名  例如QQ邮箱为 smtp.qq.com 新浪cn邮箱为 smtp.sina.cn等
            SmtpClient.Port = Port; //指定端口号
            SmtpClient.Timeout = 0;  //超时时间
        }
        #endregion

        #region 验证发件人信息
        /// <summary>
        /// 验证发件人信息
        /// </summary>
        /// <param name="MailAddress">发件邮箱地址</param>
        /// <param name="MailPwd">邮箱密码</param>
        private void setAddressform(string MailAddress, string MailPwd)
        {
            //创建服务器认证
            NetworkCredential NetworkCredential_my = new NetworkCredential(MailAddress, MailPwd);
            //实例化发件人地址
            MailAddress_from = new System.Net.Mail.MailAddress(MailAddress, "报表系统");
            MailMessage_Mai.From = MailAddress_from;
            //指定发件人信息  包括邮箱地址和邮箱密码
            SmtpClient.Credentials = new System.Net.NetworkCredential(MailAddress_from.Address, MailPwd);
        }
        #endregion

        #region 检测附件大小
        private bool Attachment_MaiInit(string path)
        {
            try
            {
                FileStream_my = new FileStream(path, FileMode.Open);
                string name = FileStream_my.Name;
                int size = (int)(FileStream_my.Length / 1024 / 1024);
                FileStream_my.Close();
                //控制文件大小不大于10M
                if (size > 10)
                {
                    return false;
                }
                return true;
            }
            catch (IOException e)
            {
                return false;
            }
        }
        #endregion

        #region 添加收件人
        /// <summary>
        /// 添加收件人列表
        /// </summary>
        /// <param name="list">收件人名单</param>
        private void AddAddressee(string[] list)
        {
            foreach (string address in list)
            {
                if (address != list[0])//第一个收件人已经添加
                {
                    MailAddress_to = new MailAddress(address);
                    MailMessage_Mai.To.Add(MailAddress_to);
                }
                //MailMessage_Mai.CC.Add(new MailAddress("test@beisen.com"));//将收件人加入域中
                //MailMessage_Mai.Bcc.Add(new MailAddress("1234567@qq.com"));
            }
        }
        #endregion


        public string SendMessage(string server, string accessoriesPath, string[] toMailAddressList, string subject, string body)
        {
            try
            {
                MailMessage_Mai = new MailMessage("test@gmail.com", toMailAddressList[0]);
                MailMessage_Mai.Subject = subject;
                MailMessage_Mai.SubjectEncoding = Encoding.UTF8;//进行字符格式转换,否则可能收到的邮件出现乱码
                MailMessage_Mai.Body = body;
                MailMessage_Mai.BodyEncoding = Encoding.UTF8;
                MailMessage_Mai.IsBodyHtml = true;
                MailMessage_Mai.Priority = MailPriority.High;//指定邮件优先级
                SmtpClient = new SmtpClient(server);

                string plainTextBody = "如果你邮件客户端不支持HTML格式,或者你切换到“普通文本”视图,将看到此内容";
                MailMessage_Mai.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(plainTextBody, null, "text/plain"));
                string htmlBodyContent = "如果你的看到<b>这个</b>,说明你是在以 <span style=\"color:red\">HTML</span> 格式查看邮件<br><br>";
                htmlBodyContent += "<a href=\"http://www.baidu.com//\">百度一下</a><img src=\"cid:imageInEmail\"/>";
                AlternateView htmlBody = AlternateView.CreateAlternateViewFromString(htmlBodyContent, null, "text/html");

                MemoryStream imgStream = GetImage();
                imgStream.Position = 0;//非常重要,否则图片为空!在邮件里显示红叉
                LinkedResource lrImage = new LinkedResource(imgStream, System.Net.Mime.MediaTypeNames.Image.Jpeg);
                lrImage.ContentId = "imageInEmail"; //此处的ContentId 对应 htmlBodyContent 内容中的 cid: ,如果设置不正确,请不会显示图片
                htmlBody.LinkedResources.Add(lrImage);

                MailMessage_Mai.AlternateViews.Add(htmlBody);


                setSmtpClient("smtp.gmail.com", 587);//587这是gmail的端口号,一般中国的邮箱发不了邮件就是因为端口号封闭了,不能提供第三方开发者调用。
                setAddressform("test@gmail.com", "mima");
                if (toMailAddressList.Length > 1)
                {
                    AddAddressee(toMailAddressList);
                }
                SmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                SmtpClient.EnableSsl = true;
                if (accessoriesPath.Trim() != "")
                {
                    MailMessage_Mai.Attachments.Clear();//添加附件    
                    MailMessage_Mai.HeadersEncoding = Encoding.UTF8;
                    MailMessage_Mai.Attachments.Add(new Attachment(accessoriesPath, MediaTypeNames.Application.Octet));
                }
                SmtpClient.Send(MailMessage_Mai);
                return "发送成功!";
            }
            catch (Exception ey)
            {
                throw ey;
            }
        }

        public static MemoryStream GetImage()
        {
            //Code here... ...
            return null;
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值