由于最近数据解析软件接入的设备很多,程序一旦发生异常如果没有及时恢复,可能会造成数据丢失,比如软件崩溃,数据库卡死无法写入数据,等等因素,会造成软件工作不正常,因此增加了一个邮件提醒功能(邮件提醒最简单),某些邮箱绑定了手机或微信,可以同步实时进行提醒,比如我用的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;
}
//调用方法
收到的邮件