Prefer to use VS2013 for compiling and testing on AppVeyor
[TortoiseGit.git] / src / Utils / HwSMTP.h
blobf7179dac8b25e19198c5836304aa7e76dc511caa
1 // HwSMTP.h: interface for the CHwSMTP class.
2 //
3 //////////////////////////////////////////////////////////////////////
5 /*******************************************************************
6 说明
7 1、这是我自己写的一个利用SMTP服务器发送邮件的类,可以实现附件的
8 发送。
9 2、在 InitInstance() 函数调用
10 if (!AfxSocketInit())
12 AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
13 return FALSE;
15 在 ExitInstance () 中调用 ::WSACleanup ();
16 *******************************************************************/
18 /****************************************************************************************************************
19 投稿说明:
20 ****************************************************************************************************************/
21 #define NOTE_SpeedPostMail \
22 _T("\
23 【软件名称】\r\n\
24 无须SMTP服务器中转直接将E-Mail电子邮件发送到对方邮箱\r\n\
25 【版 本】\r\n\
26 1.0.0\r\n\
27 【操作系统】\r\n\
28 Windows 桌面系列\r\n\
29 【作 者】\r\n\
30 谢红伟 · chrys · chrys@163.com · http://www.viction.net\r\n\
31 【软件说明】\r\n\
32 大家一定熟悉Foxmail中的“特快专递”,它能直接将邮件发送到对方的邮件服务器中,而不需要经过SMTP服务器中转,\
33 本代码将向你剖析“特快专递”发送电子邮件的方法。代码中提供了网卡信息获取类,可以获取本机IP地址、子网掩码、DNS、\
34 Wins、网卡MAC地址等相关信息;还提供了SMTP协议解析类,该类实现了SMTP客户端功能的实现类,实现电子邮件收发;Base64编码实现\
35 了字符编码的方法。\r\n\
36 你可以任意修改复制本代码,但请保留这段文字不要修改。\r\n\
37 希望我能为中国的软件行业尽一份薄力!\r\n\
38 【开发日期】\r\n\
39 2008-11-23 3:54\r\n")
41 #include <afxsock.h>
43 #define SECURITY_WIN32
44 #include <wincrypt.h>
45 #include <wintrust.h>
46 #include <schannel.h>
47 #include <security.h>
48 #include <sspi.h>
50 #if !defined(AFX_HwSMTP_H__633A52B7_1CBE_41D7_BDA3_188D98D692AF__INCLUDED_)
51 #define AFX_HwSMTP_H__633A52B7_1CBE_41D7_BDA3_188D98D692AF__INCLUDED_
53 #if _MSC_VER > 1000
54 #pragma once
55 #endif // _MSC_VER > 1000
57 enum SECURITY_LEVEL {
58 none,
59 want_tls,
60 ssl,
61 tls_established,
64 class CHwSMTP
66 public:
67 CString GetLastErrorText();
68 BOOL SendEmail (
69 LPCTSTR lpszSmtpSrvHost,
70 LPCTSTR lpszUserName,
71 LPCTSTR lpszPasswd,
72 BOOL bMustAuth,
73 LPCTSTR lpszAddrFrom,
74 LPCTSTR lpszAddrTo,
75 LPCTSTR lpszSubject,
76 LPCTSTR lpszBody,
77 LPCTSTR lpszCharSet, // 字符集类型,例如:繁体中文这里应输入"big5",简体中文时输入"gb2312"
78 CStringArray *pStrAryAttach=NULL,
79 LPCTSTR pStrAryCC=NULL,
80 UINT nSmtpSrvPort=25,
81 LPCTSTR pSend = NULL,
82 LPCTSTR pToList = NULL,
83 DWORD secLevel = SECURITY_LEVEL::none
85 BOOL SendSpeedEmail
87 LPCTSTR lpszAddrFrom,
88 LPCTSTR lpszAddrTo,
89 LPCTSTR lpszSubject,
90 LPCTSTR lpszBody,
91 LPCTSTR lpszCharSet, // 字符集类型,例如:繁体中文这里应输入"big5",简体中文时输入"gb2312"
92 CStringArray *pStrAryAttach=NULL,
93 LPCTSTR pStrAryCC=NULL,
94 LPCTSTR pSend = NULL
96 CHwSMTP();
97 virtual ~CHwSMTP();
99 protected:
100 CString GetServerAddress(CString &email);
101 void GetNameAddress(CString &in, CString &name,CString &address);
103 private:
104 BOOL SendSubject(const CString &hostname);
105 CString m_StrCC;
106 BOOL SendHead();
107 BOOL auth();
108 BOOL SendEmail();
109 BOOL Send ( const CString &data );
110 BOOL SendBuffer(char *buffer,int size=-1);
111 BOOL GetResponse( LPCTSTR lpszVerifyCode, int *pnCode=NULL );
112 BOOL m_bConnected;
113 CSocket m_SendSock;
114 CStringArray m_StrAryAttach;
115 CString m_csSmtpSrvHost;
116 CString m_csUserName;
117 CString m_csPasswd;
118 CString m_csAddrFrom;
119 CString m_csAddrTo;
120 CString m_csFromName;
121 CString m_csReceiverName;
122 CString m_csSubject;
123 CString m_csBody;
124 CString m_csSender;
125 CString m_csToList;
127 CtxtHandle * hContext;
128 CredHandle * hCreds;
129 SecPkgContext_StreamSizes Sizes;
130 PBYTE pbIoBuffer;
131 DWORD cbIoBufferLength;
132 SECURITY_LEVEL m_iSecurityLevel;
134 BOOL m_bMustAuth;
135 UINT m_nSmtpSrvPort;
136 CString m_csCharSet;
138 CString m_csLastError;
139 BOOL SendOnAttach(LPCTSTR lpszFileName);
140 BOOL SendAttach();
141 BOOL SendBody();
142 CString m_csMIMEContentType;
143 CString m_csPartBoundary;
144 CString m_csNoMIMEText;
147 #endif // !defined(AFX_HwSMTP_H__633A52B7_1CBE_41D7_BDA3_188D98D692AF__INCLUDED_)