使用Email发送功能

上次CRM中用到了Email发送功能,虽然最后实现了,但对效果并不满意。

后来又找了些资料,重新整理了一份,废话不多说,直接上代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Mail;

namespace CRM.Business.Att
{
    class KenceryCommonMethod
    {
        /// <summary>
        /// 功能:实现邮件发送,分装发送邮件的调用方法
        /// </summary>

        public class Email
        {
            #region  --------------------字段--------------------

            private string _serviceType = "SMTP";
            private string _host;

            #endregion

            #region  --------------------属性--------------------

            /// <summary>
            /// 发送者邮箱
            /// </summary>
            public string From { get; set; }

            /// <summary>
            /// 接收者邮箱列表
            /// </summary>
            public string[] To { get; set; }

            /// <summary>
            /// 抄送者邮箱列表
            /// </summary>
            public string[] Cc { get; set; }

            /// <summary>
            /// 秘抄者邮箱列表
            /// </summary>
            public string[] Bcc { get; set; }

            /// <summary>
            /// 邮件主题
            /// </summary>
            public string Subject { get; set; }

            /// <summary>
            /// 邮件内容
            /// </summary>
            public string Body { get; set; }

            /// <summary>
            /// 是否是HTML格式
            /// </summary>
            public bool IsBodyHtml { get; set; }

            /// <summary>
            /// 附件列表
            /// </summary>
            public string[] Attachments { get; set; }

            /// <summary>
            /// 邮箱服务类型(Pop3,SMTP,IMAP,MAIL等),默认为SMTP
            /// </summary>
            public string ServiceType
            {
                get { return _serviceType; }
                set { _serviceType = value; }
            }

            /// <summary>
            /// 邮箱服务器,如果没有定义邮箱服务器,则根据serviceType和Sender组成邮箱服务器
            /// </summary>
            public string Host
            {
                get
                {
                    return string.IsNullOrEmpty(_host)
                        ? (this.ServiceType + "." +
                           Sender.Split("@".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1])
                        : _host;
                }
                set { _host = value; }
            }

            /// <summary>
            /// 邮箱账号(默认为发送者邮箱的账号)
            /// </summary>
            public string UserName { get; set; }

            /// <summary>
            /// 邮箱密码(默认为发送者邮箱的密码),默认格式GB2312
            /// </summary>
            public string Password { get; set; }

            /// <summary>
            /// 邮箱优先级
            /// </summary>
            public MailPriority MailPriority { get; set; }

            /// <summary>
            ///  邮件正文编码格式
            /// </summary>
            public Encoding Encoding { get; set; }

            #endregion

            #region  ------------------调用方法------------------

            /// <summary>
            /// 构造参数,发送邮件,使用方法备注:公开方法中调用
            /// </summary>
            public void Send()
            {
                var mailMessage = new MailMessage();

                //读取To  接收者邮箱列表
                if (this.To != null && this.To.Length > 0)
                {
                    foreach (string to in this.To)
                    {
                        if (string.IsNullOrEmpty(to)) continue;
                        try
                        {
                            mailMessage.To.Add(new MailAddress(to.Trim()));
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message);
                        }
                    }
                }
                //读取Cc  抄送者邮件地址
                if (this.Cc != null && this.Cc.Length > 0)
                {
                    foreach (var cc in this.Cc)
                    {
                        if (string.IsNullOrEmpty(cc)) continue;
                        try
                        {
                            mailMessage.CC.Add(new MailAddress(cc.Trim()));
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message);
                        }
                    }
                }
                //读取Attachments 邮件附件
                if (this.Attachments != null && this.Attachments.Length > 0)
                {
                    foreach (var attachment in this.Attachments)
                    {
                        if (string.IsNullOrEmpty(attachment)) continue;
                        try
                        {
                            mailMessage.Attachments.Add(new Attachment(attachment));
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message);
                        }
                    }
                }
                //读取Bcc 秘抄人地址
                if (this.Bcc != null && this.Bcc.Length > 0)
                {
                    foreach (var bcc in this.Bcc)
                    {
                        if (string.IsNullOrEmpty(bcc)) continue;
                        try
                        {
                            mailMessage.Bcc.Add(new MailAddress(bcc.Trim()));
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message);
                        }
                    }
                }
                //读取From 发送人地址
                try
                {
                    mailMessage.From = new MailAddress(this.From);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }

                //邮件标题
                Encoding encoding = Encoding.GetEncoding("GB2312");
                mailMessage.Subject = string.Format("?={0}?B?{1}?=", encoding.HeaderName,
                    Convert.ToBase64String(encoding.GetBytes(this.Subject), Base64FormattingOptions.None));
                //邮件正文是否为HTML格式
                mailMessage.IsBodyHtml = this.IsBodyHtml;
                //邮件正文
                mailMessage.Body = this.Body;
                mailMessage.BodyEncoding = this.Encoding;
                //邮件优先级
                mailMessage.Priority = this.MailPriority;

                //发送邮件代码实现
                var smtpClient = new SmtpClient
                {
                    Host = this.Host,
                    Credentials = new NetworkCredential(this.UserName, this.Password)
                };
                //认证
                try
                {
                    smtpClient.Send(mailMessage);
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }

            #endregion
        }

        /// <summary>
        ///邮件发送接口调用:bool isTrue=EmailInfo.SendEmail(参数,........);   参数解释参考方法
        /// </summary>
        public static class EmailInfo
        {
            /// <summary>
            /// 邮件发送方法,传递参数(使用中如出现问题,调试)
            /// </summary>
            /// <param name="from">发送者邮箱名称(从配置文件中读取,比如:[email protected])(必填项)</param>
            /// <param name="to">接收者邮箱列表,可以传递多个,使用string[]表示(从配置文件中读取)(必填项)</param>
            /// <param name="cc">抄送者邮箱列表,可以传递多个,使用string[]表示(从配置文件中读取)</param>
            /// <param name="bcc">秘抄者邮箱列表,可以传递多个,使用string[]表示(从配置文件中读取)</param>
            /// <param name="subject">邮件主题,构造(必填项)</param>
            /// <param name="body">邮件内容,构造发送的邮件内容,可以发送网页(必填项)</param>
            /// <param name="isBodyHtml">是否是HTML格式,true为是,false为否</param>
            /// <param name="attachments">邮箱附件,可以传递多个,使用string[]表示(从配置文件中读取),可空</param>
            /// <param name="host">邮箱服务器(从配置文件中读取,如:[email protected])(必填项)</param>
            /// <param name="password">邮箱密码(从配置文件中读取,from邮箱的密码)(必填项)</param>
            /// <returns>邮件发送成功,返回true,否则返回false</returns>
            public static bool SendEmail(string from, string[] to, string[] cc, string[] bcc, string subject, string body,
                bool isBodyHtml, string[] attachments, string host, string password)
            {
                //邮箱发送不满足,限制这些参数必须传递
                if (from == "" || to.Length <= 0 || subject == "" || body == "" || host == "" || password == "")
                {
                    return false;
                }

                var emil = new Email
                {
                    From = @from,
                    To = to,
                    Cc = cc,
                    Bcc = bcc,
                    Subject = subject,
                    Body = body,
                    IsBodyHtml = isBodyHtml,
                    Attachments = attachments,
                    Host = host,
                    Password = password
                };
                try
                {
                    emil.Send();
                    return true;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }
    }
}

  

时间: 2024-10-22 02:00:56

使用Email发送功能的相关文章

redmine邮件发送功能配置详解

redmine的邮件发送功能还是很有用的. 像项目有更新啦,任务分配啦,都能邮件发送的相关责任人. 我自己在linux服务器上安装并启动了redmine后,邮件一直发送了不了. 查了网上的资料,都是讲修改下配置文件就可以了,他们没错,只是没有讲全. 下面是我整理的一个redmine邮件发送功能设置的一个完整流程. 1. sendmail安装与检查 linux机器上安装的redmine要能发送邮件,先得是本机的sendmail功能是正常的. 查看sendmail进程是否已正常启动: $ ps au

薪资表自动拆分和发送功能

起因是这样的,俺家妹子在单位兼一些hr的工作,每个月要负责给所有人发工资条.工资条是以excel文件的形式,作为Email的附件发出.她有一张总表,每个月发完薪水,她都要把总表拆成一个个单独的附件,附件名以每位同事的名字命名,比如"李四.xls",然后用Foxmail建立一封新邮件,填上地址.标题.正文,再把对应的附件默默地拖到邮件中,点击"发送".还好单位人不多,五六十号人,发完所有工资条邮件,大概花费一个多小时.虽然总时间不多,但是每个月的这个时候,总有一股莫名

邮件发送功能开发

作为一名.Net开发,"邮件发送"功能的开发和使用是必须要掌握的,因为这个功能作为"消息推送"的一种手段经常出现在各种.Net系统中,所以本文将对.Net平台下的"邮件发送",做一个细致的分析! 一.who需要邮件功能 1.服务提供方:需提供邮件收发客户端或Web服务.如:QQ邮箱.GMail邮箱.126.163等知名邮件服务提供商.注:如果你使用的第三方不知名邮件服务商提供的邮件收发服务,通过其发出的邮件,可能会被其他知名邮件服务提供商的STM

ThinkPHP中邮件发送功能

初次使用thinkphp框架,开发一个邮件发送功能,由于对框架不熟悉折腾了几个小时终于成功了,以下是代码记录. 此函数只能在ThinkPHP中使用且需要phpmailer扩展的支持:phpmail的下载地址:https://code.google.com/a/apache-extras.org/p/phpmailer 将phpmailer解压后放置扩展放置到第三方类库扩展目录下: ThinkPHP/Extend/Vendor/文件夹下即可,并使用vendor方法来导入.更详细介绍参考:http:

薪资表自动拆分和发送功能(二)

上一篇文章讲了薪资表的拆分功能,这里讲发送功能.<薪资表自动拆分和发送功能(一)>点击打开链接 发送功能是用python的email模块实现的,代码如下.运行环境是active python2.7 # -*- coding: cp936 -*- import smtplib from email.mime.text import MIMEText import email.mime.multipart from email.MIMEMultipart import MIMEMultipart

C#实现简单的邮件发送功能

唉,最近要做一个项目,里面需要实现邮件发送功能.在网络上也找一些看,自己也随便写下.也当做是给自己复习下吧,如有不对之处还请大家指出.谢谢! 首先我是创建一个实体对象Model (EmailParameterSet) : 1 public class EmailParameterSet 2 { 3 /// <summary> 4 /// 收件人的邮件地址 5 /// </summary> 6 public string ConsigneeAddress { get; set; }

C# 消息发送功能(支持多种发送方式)

总体设计: IMessageChannel接口:一个消息的发送方式,即消息的发送通道.有一个Process方法,此方法处理本消息发送通道怎么去发送消息.接受一个IDictionary<string,object>参数,此参数提供发送的内容,是一个键值对集合.希望消息有多种发送方式.每种方式实现此接口即可. IMessageChannelSelector: 消息通道选择器,用于消息通道管理器,便于管理器能正确的选择出一个消息发送的通道. IMessageChannelManager:消息通道管理

python selenium2示例 - email发送

前言 在进行日常的自动化测试实践中,我们总是需要将测试过程中的记录.结果等等等相关信息通过自动的手段发送给相关人员.python的smtplib.email模块为我们提供了很好的email发送等功能的实现. 纯文本邮件 在通常情况下,我们需要发送大量的纯文本类的邮件通知,或是发送概要性测试报告时,会用到此类发送方式,示例代码如下: #-*- coding:utf-8 -*- __author__ = u'苦叶子' import smtplib from email.mime.text impor

.NET开发邮件发送功能的全面教程(含邮件组件源码)

ref: http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         邮件发送相关.NET类库 3)         介绍我开发的一个发送邮件的小组件(MailHelper) 4)         MailHelper组