VC++ 發(fā)送郵件(使用郵件進(jìn)行程序異常報(bào)告)
由于最近數(shù)據(jù)解析軟件接入的設(shè)備很多,程序一旦發(fā)生異常如果沒有及時(shí)恢復(fù),可能會(huì)造成數(shù)據(jù)丟失,比如軟件崩潰,數(shù)據(jù)庫卡死無法寫入數(shù)據(jù),等等因素,會(huì)造成軟件工作不正常,因此增加了一個(gè)郵件提醒功能(郵件提醒最簡(jiǎn)單),某些郵箱綁定了手機(jī)或微信,可以同步實(shí)時(shí)進(jìn)行提醒,比如我用的139郵箱,或者QQ郵箱,會(huì)直接在微信,短信上面提醒,實(shí)時(shí)性還是比較高。
//郵件發(fā)送類-寫成了全局類
#include?"StdAfx.h"
#include?"e-mail.h"
#define??CLASS_NAME??E_MAIL_Class //類名稱定義
E_MAIL_Class?g_EmailClass; //全局靜態(tài)郵件發(fā)送類
/*************************************************************************************************************************
*?函數(shù) : String?^CLASS_NAME::SendEmail(String?^pSendEmail,?String?^pPassword,?String?^pSendServer,?String?^pInboxEmail,?String?^pCCEmail,String?^pTitle,?String?^pContent)
*?功能 : 發(fā)送一封郵件
*?參數(shù) : pSendEmail:發(fā)件箱;pPassword:發(fā)件箱密碼;pSendServer:發(fā)件箱服務(wù)器;pInboxEmail:收件箱;pCCEmail:抄送;pTitle:郵件主題;pContent:郵件內(nèi)容
*?返回 : null:發(fā)送成功;其它:發(fā)送失敗字符串
*?依賴 : 底層讀寫函數(shù)
*?作者 : cp1300@139.com
*?時(shí)間 : 2018-01-18
*?最后修改時(shí)間? :? 2018-01-20
*?說明 :? 用于發(fā)送郵件
*************************************************************************************************************************/
String?^CLASS_NAME::SendEmail(String?^pSendEmail,?String?^pPassword,?String?^pSendServer,?String?^pInboxEmail,?String?^pCCEmail,?String?^pTitle,?String?^pContent)
{
try
{
//實(shí)例化一個(gè)發(fā)送郵件類。
MailMessage?^mailMessage?=?gcnew?MailMessage();
//發(fā)件人郵箱地址,方法重載不同,可以根據(jù)需求自行選擇。
mailMessage->From?=?gcnew?MailAddress(pSendEmail);
//收件人郵箱地址。
mailMessage->To->Add(gcnew?MailAddress(pInboxEmail));
//抄送人郵箱地址
if?(pCCEmail?!=?nullptr?&&?pCCEmail->Length?>?3)
{
mailMessage->CC->Add(pCCEmail);
}
//郵件標(biāo)題。
mailMessage->Subject?=?pTitle;
//郵件內(nèi)容。
mailMessage->Body?=?pContent;
//實(shí)例化一個(gè)SmtpClient類。
SmtpClient?^client?=?gcnew?SmtpClient();
//在這里我使用的是qq郵箱,所以是smtp.qq.com,如果你使用的是126郵箱,那么就是smtp.126.com。
client->Host?=?pSendServer;
//使用安全加密連接。
client->EnableSsl?=?true;
//不和請(qǐng)求一塊發(fā)送。
client->UseDefaultCredentials?=?false;
//驗(yàn)證發(fā)件人身份(發(fā)件人的郵箱,郵箱里的生成授權(quán)碼);
client->Credentials?=?gcnew?System::Net::NetworkCredential(pSendEmail,?pPassword);
//發(fā)送
client->Send(mailMessage);
return?nullptr; //發(fā)送成功
}
catch?(Exception^?e) //發(fā)送失敗
{
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發(fā)送相關(guān)
using?namespace?System::Net::Mail;
using?namespace?System::Text;
using?namespace?System::Data;
using?namespace?System;
class?E_MAIL_Class
{
public:
//構(gòu)造函數(shù)
E_MAIL_Class()
{
}
//發(fā)送一封郵件
public:String?^SendEmail(String?^pSendEmail,?String?^pPassword,?String?^pSendServer,?String?^pInboxEmail,?String?^pCCEmail,?String?^pTitle,?String?^pContent);
//析構(gòu)函數(shù)
~E_MAIL_Class()
{
}
};
extern?E_MAIL_Class?g_EmailClass; //全局靜態(tài)郵件發(fā)送類
//添加了一個(gè)配置界面
將配置信息存儲(chǔ)到了ini文件,存儲(chǔ)的郵箱密碼記得加密,不要明文存放到配置文件,這里使用了簡(jiǎn)單的AES256進(jìn)行了加密
//郵件發(fā)送方法,也是用的全局靜態(tài)的,方便隨時(shí)調(diào)用
//發(fā)送一個(gè)異常日志郵件
bool?NAME_SPACE::SendErrorEmail(String?^pTitle,?String?^pContent)
{
//異常處理
try
{
if?(g_EmailConfig.isEnable?==?false)?return?false; //沒有開啟發(fā)送功能,直接退出
String?^pError;
System::DateTime?dt?=?System::DateTime::Now; //系統(tǒng)時(shí)間
//發(fā)送測(cè)試郵件
pError?=?g_EmailClass.SendEmail(
CharToString(g_EmailConfig.SenderEmail), //發(fā)件箱email
CharToString(g_EmailConfig.SenderPassword), //發(fā)件箱密碼
CharToString(g_EmailConfig.SenderServer), //發(fā)件箱服務(wù)器
CharToString(g_EmailConfig.InboxEmail), //收件箱email
CharToString(g_EmailConfig.CCEmail), //抄送email
pTitle, //郵件標(biāo)題
dt.ToString("yyyy-MM-dd?HH:mm:ss")?+?"t?"?+?pContent?//郵件內(nèi)容
);
if?(pError?!=?nullptr)
{
return?false;
}
return?true;
}
catch?(Exception^?e)
{
SYS_LOG.Write(__FILE__?+?__LINE__?+?e->Message?+?e->StackTrace);
}
return?false;
}
//調(diào)用方法
收到的郵件





