C# 使用JMail发送邮件

这个C#代码示例展示了如何使用JMail库发送邮件,包括设置邮件服务器的用户账号和密码,以及处理邮件的主题、内容、附件、收件人、抄送人和暗送人。邮件发送过程涉及从数据集中获取待发送邮件信息,并通过遍历数据集逐个发送邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            private string m_strMail_Server = "";   //邮件服务器
            private string m_strMail_UserName = "";  //邮件服务器用户账号
            private string m_strMail_Password = "";   //邮件服务器用户密码

 

public string SendMail()
        {

            string strSubject = "", strBody = "";    //主题和内容
            string strAttachment = "";  //附件
            string strSender = "", strSenderName = ""; //发件人账号,  发件人显示名称
            string strReceiver = "", strCC = "", strBCC = "";  //收件人  抄送人    暗送人

            try
            {
                #region JMail预设置

                jmail.Message jm = new jmail.Message();

                jm.MailServerUserName = m_strMail_UserName;
                jm.MailServerPassWord = m_strMail_Password;

                jm.Logging = true;
                jm.Silent = true;
                jm.Charset = "gb2312";
                jm.Encoding = "base64";
                jm.ContentTransferEncoding = "base64";

                //jm.ContentType = "text/html"; 由于需要挂载附件,因此此处注释,否则附件将显示为乱码 

                #endregion

                //获取待发邮件清单
                DataSet ds = Mail_GetList();
                #region Format
                /*
                 * SENDER
                 * SENDER_NAME
                 * RECEIVER
                 * CC
                 * BCC
                 * SUBJECT
                 * HEADER
                 * CONTENT
                 * FOOTER
                 * ATTACHMENT
                */
                #endregion

                //有待发送的记录
                if (ds != null && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow row in ds.Tables[0].Rows)
                    {
                        //取项值
                        strSender = row["SENDER"].ToString().Trim();
                        strSenderName = row["SENDER_NAME"].ToString().Trim();
                        strReceiver = row["RECEIVER"].ToString().Trim();
                        strCC = row["CC"].ToString().Trim();
                        strBCC = row["BCC"].ToString().Trim();
                        strSubject = row["SUBJECT"].ToString().Trim();
                        strBody = row["HEADER"].ToString().Trim() + row["CONTENT"].ToString().Trim() + row["FOOTER"].ToString().Trim();
                        strAttachment = row["ATTACHMENT"].ToString().Trim();

                        //邮件发送
                        try
                        {
                            #region 发送人

                            jm.From = strSender;
                            jm.FromName = strSenderName;

                            #endregion

                            #region 接收人,抄送,暗送
                            jm.Recipients.Clear();

                            //收件人
                            if (strReceiver.Trim() != "")
                            {
                                string[] strReceiverList = strReceiver.Trim().Trim(';').Trim().Split(';');
                                foreach (string strTempReceiver in strReceiverList)
                                {
                                    jm.AddRecipient(strTempReceiver.Trim(), strTempReceiver, strTempReceiver);
                                }
                            }
                            //抄送
                            if (strCC.Trim() != "")
                            {
                                string[] strCCList = strCC.Trim().Trim(';').Trim().Split(';');
                                foreach (string strTempCC in strCCList)
                                {
                                    jm.AddRecipientCC(strTempCC.Trim(), strTempCC, strTempCC);
                                }
                            }
                            //暗送
                            if (strBCC.Trim() != "")
                            {
                                string[] strBCCList = strBCC.Trim().Trim(';').Trim().Split(';');
                                foreach (string strTempBCC in strBCCList)
                                {
                                    jm.AddRecipientBCC(strTempBCC.Trim(), strTempBCC);
                                }
                            }

                            #endregion

                            #region 邮件内容
                            jm.ClearAttachments();

                            jm.Subject = strSubject;
                           
                            //HTML标记必须封闭
                            strBody = "<html>" + strBody + "</html>";
                            jm.HTMLBody = strBody;

                            //附件
                            if (strAttachment.Trim() != "")
                            {
                                string[] strAttachmentList = strAttachment.Trim().Trim('|').Trim().Split('|');
                                ArrayList strAttachmentListResult = new ArrayList();
                                #region 剔除无效、重复附件

                                foreach (string strTempAttachment in strAttachmentList)
                                {
                                    //附件不为空 且 不重复
                                    if (strTempAttachment.Trim() != "" && !strAttachmentListResult.Contains(strTempAttachment.ToUpper().Trim()))
                                    {
                                        strAttachmentListResult.Add(strTempAttachment.ToUpper().Trim());
                                    }
                                }

                                #endregion

                                foreach (string strTempAttachment in strAttachmentListResult)
                                {
                                    jm.AddAttachment(strTempAttachment.Trim(), true, "application/octet-stream");
                                }
                            }

                            #endregion

                            #region 发送

                            if (jm.Send(m_strMail_Server, false))
                            {
                                //成功
                                try
                                {
                                    //LOG


                                 }
                                catch { }
                                try
                                {
                                    //发送成功


                                 }
                                catch { }
                            }
                            else
                            {
                                //失败
                                try
                                {
                                    //LOG
                                }
                                catch { }
                                try
                                {
                                    //发送失败
                                }
                                catch { }
                            }

                            #endregion
                        }
                        catch (Exception ex) //发送邮件的异常
                        {
                            //失败
                            try
                            {
                                //LOG
                            }
                            catch { }
                            try
                            {
                                //发送失败
                            }
                            catch { }
                        }
                    }
                }
                //else
                //{
                //    return "NONE:没有可发送的记录!";
                //}

                jm.Clear();
                jm = null;
                ds = null;

                return "SUCCESS";
            }
            catch (Exception ex) //服务层面的异常
            {
                return "ERROR: Service -- " + ex.Message;
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值