VC++ 发送邮件(使用邮件进行程序异常报告)
扫描二维码
随时随地手机看文章
由于最近数据解析软件接入的设备很多,程序一旦发生异常如果没有及时恢复,可能会造成数据丢失,比如软件崩溃,数据库卡死无法写入数据,等等因素,会造成软件工作不正常,因此增加了一个邮件提醒功能(邮件提醒最简单),某些邮箱绑定了手机或微信,可以同步实时进行提醒,比如我用的139邮箱,或者QQ邮箱,会直接在微信,短信上面提醒,实时性还是比较高。
//邮件发送类-写成了全局类
#include "StdAfx.h" #include "e-mail.h" #define CLASS_NAME E_MAIL_Class //类名称定义 E_MAIL_Class g_EmailClass; //全局静态邮件发送类 /************************************************************************************************************************* * 函数 : String ^CLASS_NAME::SendEmail(String ^pSendEmail, String ^pPassword, String ^pSendServer, String ^pInboxEmail, String ^pCCEmail,String ^pTitle, String ^pContent) * 功能 : 发送一封邮件 * 参数 : pSendEmail:发件箱;pPassword:发件箱密码;pSendServer:发件箱服务器;pInboxEmail:收件箱;pCCEmail:抄送;pTitle:邮件主题;pContent:邮件内容 * 返回 : null:发送成功;其它:发送失败字符串 * 依赖 : 底层读写函数 * 作者 : cp1300@139.com * 时间 : 2018-01-18 * 最后修改时间 : 2018-01-20 * 说明 : 用于发送邮件 *************************************************************************************************************************/ String ^CLASS_NAME::SendEmail(String ^pSendEmail, String ^pPassword, String ^pSendServer, String ^pInboxEmail, String ^pCCEmail, String ^pTitle, String ^pContent) { try { //实例化一个发送邮件类。 MailMessage ^mailMessage = gcnew MailMessage(); //发件人邮箱地址,方法重载不同,可以根据需求自行选择。 mailMessage->From = gcnew MailAddress(pSendEmail); //收件人邮箱地址。 mailMessage->To->Add(gcnew MailAddress(pInboxEmail)); //抄送人邮箱地址 if (pCCEmail != nullptr && pCCEmail->Length > 3) { mailMessage->CC->Add(pCCEmail); } //邮件标题。 mailMessage->Subject = pTitle; //邮件内容。 mailMessage->Body = pContent; //实例化一个SmtpClient类。 SmtpClient ^client = gcnew SmtpClient(); //在这里我使用的是qq邮箱,所以是smtp.qq.com,如果你使用的是126邮箱,那么就是smtp.126.com。 client->Host = pSendServer; //使用安全加密连接。 client->EnableSsl = true; //不和请求一块发送。 client->UseDefaultCredentials = false; //验证发件人身份(发件人的邮箱,邮箱里的生成授权码); client->Credentials = gcnew System::Net::NetworkCredential(pSendEmail, pPassword); //发送 client->Send(mailMessage); return nullptr; //发送成功 } catch (Exception^ e) //发送失败 { SYS_LOG.Write(__FILE__ + __LINE__ + e->Message); return e->Message; } }
#pragma once #define WIN32_LEAN_AND_MEAN #include "windows.h" #include "systemlog.h" //E-Mail发送相关 using namespace System::Net::Mail; using namespace System::Text; using namespace System::Data; using namespace System; class E_MAIL_Class { public: //构造函数 E_MAIL_Class() { } //发送一封邮件 public:String ^SendEmail(String ^pSendEmail, String ^pPassword, String ^pSendServer, String ^pInboxEmail, String ^pCCEmail, String ^pTitle, String ^pContent); //析构函数 ~E_MAIL_Class() { } }; extern E_MAIL_Class g_EmailClass; //全局静态邮件发送类
//添加了一个配置界面
将配置信息存储到了ini文件,存储的邮箱密码记得加密,不要明文存放到配置文件,这里使用了简单的AES256进行了加密
//邮件发送方法,也是用的全局静态的,方便随时调用
//发送一个异常日志邮件 bool NAME_SPACE::SendErrorEmail(String ^pTitle, String ^pContent) { //异常处理 try { if (g_EmailConfig.isEnable == false) return false; //没有开启发送功能,直接退出 String ^pError; System::DateTime dt = System::DateTime::Now; //系统时间 //发送测试邮件 pError = g_EmailClass.SendEmail( CharToString(g_EmailConfig.SenderEmail), //发件箱email CharToString(g_EmailConfig.SenderPassword), //发件箱密码 CharToString(g_EmailConfig.SenderServer), //发件箱服务器 CharToString(g_EmailConfig.InboxEmail), //收件箱email CharToString(g_EmailConfig.CCEmail), //抄送email pTitle, //邮件标题 dt.ToString("yyyy-MM-dd HH:mm:ss") + "t " + pContent //邮件内容 ); if (pError != nullptr) { return false; } return true; } catch (Exception^ e) { SYS_LOG.Write(__FILE__ + __LINE__ + e->Message + e->StackTrace); } return false; }
//调用方法
收到的邮件