上一篇文章http://blog.csdn.net/wangjiannuaa/article/details/6949368阐述了winInet基本使用方法。登录邮箱后干啥?当然是发邮件了~搞了半天终于把程序调通了。

首先还是分析真实的环境,邮件是怎么发送出去的,所谓分析,在这里就是抓包看数据了。

如下图所示,上一篇文章基础,也就是登录邮箱后,动作分解为三步骤:1.进入基本版-2.点击写信-3.点击发送。至于为什么是基本版,前文已有论述,是为了避免繁文缛节,把数据包尽可能得简化。


对应的文本如下

第一步,进入基本版:

GET http://m1.mail.sina.com.cn/basic/ HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://m1.mail.sina.com.cn/basic/listmail.php?fid=new
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Accept-Encoding: gzip, deflate
Host: m1.mail.sina.com.cn
Connection: Keep-Alive
Cookie: freeName=jimmy_cmd@sina.com; SINAMAIL-WEBFACE-SESSID=4810c7c33fc1e1c6682bceab4ddef2c6; UOR=,,; U_TRS1=000000b4.2d6a4a30.4dbeccdf.f7085a45; vjuids=-8a3c2a43b.12f673b30db.0.8ab6cd7a91ca3; vjlast=1304434711; SINAGLOBAL=00000049.c6df3442.4e8ecea8.c10d0d3d; ULV=1320821256248:19:9:9:00000042.71d45d8d.4eba2208.9827aebf:1320816503894; ALLYESID4=00110503104143503706036; SGUP=0; mvsign=v%3D%2Atz%3Cc5uhs4CE5F_%24Uf5%3E; loginType=freemail; SHOW_TIP_BOX=1; _s_upa=7; ULOGIN_IMG=13208272802654; Apache=00000042.71d45d8d.4eba2208.9827aebf; SID=BdimHsH8SQooBHNNxsHHNHgo4oBBrWWBBoWHN8nirxHHNoWBgxW8yoW; SPRIAL=d38fb34629f58bca2d47db89f8bcc1f5; SINA_USER=j; U_TRS2=000000a2.1e3514bd.4eba226c.e1f9f60b; SUE=es%3D08613ec0baa20bc5de1c64800beebcd4%26ev%3Dv1%26es2%3Db3819624e7f5c93ed6e9ffd2f7667ccb%26rs0%3DegQRXaekdBX0Cv4RZLVGeN%252BJov2MOCrllf%252BT5K%252FHgqxOfu7Z3F8xlJHKpglceCpId1YzV%252FFh91g5tZvk86raopv99gWgxx%252FfAaEFoC6DeskUGWkmwKVO9yAspaUSOo4SPSzMlZX0Gy%252BkHtU%252BsOx7rVIVjNy6Zezg5oyexRYLOPk%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1320827324%26et%3D1320913724%26lt%3D1%26uid%3D2521991044%26user%3Djimmy_cmd.%252A%252A%26ag%3D9%26name%3Djimmy_cmd%2540sina.com%26nick%3Djimmy_cmd%26sex%3D%26ps%3D0%26email%3Djimmy_cmd%2540sina.com%26dob%3D%26ln%3Djimmy_cmd%2540sina.com%26os%3D%26fmp%3D%26lcp%3D%26us%3D; SWEBAPPSESSID=ff951a6cf52f9a9cdfb8dfd7b67d0b8b; SWMHA=SWMHA137; WTP_VISSTATUS=TRUE; WTP_VISTAB=address

第二步,点击写信:

GET http://m1.mail.sina.com.cn/basic/writemail.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://m1.mail.sina.com.cn/basic/
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Accept-Encoding: gzip, deflate
Host: m1.mail.sina.com.cn
Connection: Keep-Alive
Cookie: freeName=jimmy_cmd@sina.com; SINAMAIL-WEBFACE-SESSID=4810c7c33fc1e1c6682bceab4ddef2c6; UOR=,,; U_TRS1=000000b4.2d6a4a30.4dbeccdf.f7085a45; vjuids=-8a3c2a43b.12f673b30db.0.8ab6cd7a91ca3; vjlast=1304434711; SINAGLOBAL=00000049.c6df3442.4e8ecea8.c10d0d3d; ULV=1320821256248:19:9:9:00000042.71d45d8d.4eba2208.9827aebf:1320816503894; ALLYESID4=00110503104143503706036; SGUP=0; mvsign=v%3D%2Atz%3Cc5uhs4CE5F_%24Uf5%3E; loginType=freemail; SHOW_TIP_BOX=1; _s_upa=7; ULOGIN_IMG=13208272802654; Apache=00000042.71d45d8d.4eba2208.9827aebf; SID=BdimHsH8SQooBHNNxsHHNHgo4oBBrWWBBoWHN8nirxHHNoWBgxW8yoW; SPRIAL=d38fb34629f58bca2d47db89f8bcc1f5; SINA_USER=j; U_TRS2=000000a2.1e3514bd.4eba226c.e1f9f60b; SUE=es%3D08613ec0baa20bc5de1c64800beebcd4%26ev%3Dv1%26es2%3Db3819624e7f5c93ed6e9ffd2f7667ccb%26rs0%3DegQRXaekdBX0Cv4RZLVGeN%252BJov2MOCrllf%252BT5K%252FHgqxOfu7Z3F8xlJHKpglceCpId1YzV%252FFh91g5tZvk86raopv99gWgxx%252FfAaEFoC6DeskUGWkmwKVO9yAspaUSOo4SPSzMlZX0Gy%252BkHtU%252BsOx7rVIVjNy6Zezg5oyexRYLOPk%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1320827324%26et%3D1320913724%26lt%3D1%26uid%3D2521991044%26user%3Djimmy_cmd.%252A%252A%26ag%3D9%26name%3Djimmy_cmd%2540sina.com%26nick%3Djimmy_cmd%26sex%3D%26ps%3D0%26email%3Djimmy_cmd%2540sina.com%26dob%3D%26ln%3Djimmy_cmd%2540sina.com%26os%3D%26fmp%3D%26lcp%3D%26us%3D; SWEBAPPSESSID=ff951a6cf52f9a9cdfb8dfd7b67d0b8b; SWMHA=SWMHA137; WTP_VISSTATUS=TRUE; WTP_VISTAB=address

第三步,点击发送:

POST http://m1.mail.sina.com.cn/basic/sendmail.php HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://m1.mail.sina.com.cn/basic/writemail.php
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Content-Type: multipart/form-data; boundary=---------------------------7db2a861008aa
Accept-Encoding: gzip, deflate
Host: m1.mail.sina.com.cn
Content-Length: 1305
Connection: Keep-Alive
Pragma: no-cache
Cookie: freeName=jimmy_cmd@sina.com; SINAMAIL-WEBFACE-SESSID=4810c7c33fc1e1c6682bceab4ddef2c6; UOR=,,; U_TRS1=000000b4.2d6a4a30.4dbeccdf.f7085a45; vjuids=-8a3c2a43b.12f673b30db.0.8ab6cd7a91ca3; vjlast=1304434711; SINAGLOBAL=00000049.c6df3442.4e8ecea8.c10d0d3d; ULV=1320821256248:19:9:9:00000042.71d45d8d.4eba2208.9827aebf:1320816503894; ALLYESID4=00110503104143503706036; SGUP=0; mvsign=v%3D%2Atz%3Cc5uhs4CE5F_%24Uf5%3E; loginType=freemail; SHOW_TIP_BOX=1; _s_upa=7; ULOGIN_IMG=13208272802654; Apache=00000042.71d45d8d.4eba2208.9827aebf; SID=BdimHsH8SQooBHNNxsHHNHgo4oBBrWWBBoWHN8nirxHHNoWBgxW8yoW; SPRIAL=d38fb34629f58bca2d47db89f8bcc1f5; SINA_USER=j; U_TRS2=000000a2.1e3514bd.4eba226c.e1f9f60b; SUE=es%3D08613ec0baa20bc5de1c64800beebcd4%26ev%3Dv1%26es2%3Db3819624e7f5c93ed6e9ffd2f7667ccb%26rs0%3DegQRXaekdBX0Cv4RZLVGeN%252BJov2MOCrllf%252BT5K%252FHgqxOfu7Z3F8xlJHKpglceCpId1YzV%252FFh91g5tZvk86raopv99gWgxx%252FfAaEFoC6DeskUGWkmwKVO9yAspaUSOo4SPSzMlZX0Gy%252BkHtU%252BsOx7rVIVjNy6Zezg5oyexRYLOPk%253D%26rv%3D0; SUP=cv%3D1%26bt%3D1320827324%26et%3D1320913724%26lt%3D1%26uid%3D2521991044%26user%3Djimmy_cmd.%252A%252A%26ag%3D9%26name%3Djimmy_cmd%2540sina.com%26nick%3Djimmy_cmd%26sex%3D%26ps%3D0%26email%3Djimmy_cmd%2540sina.com%26dob%3D%26ln%3Djimmy_cmd%2540sina.com%26os%3D%26fmp%3D%26lcp%3D%26us%3D; SWEBAPPSESSID=ff951a6cf52f9a9cdfb8dfd7b67d0b8b; SWMHA=SWMHA137; WTP_VISSTATUS=TRUE; WTP_VISTAB=address

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="to"

jimmy_cmd@sina.com
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="cc"

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="bcc"

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="subject"

subject-basic
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="atth1"; filename=""
Content-Type: application/octet-stream

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="atth2"; filename=""
Content-Type: application/octet-stream

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="atth3"; filename=""
Content-Type: application/octet-stream

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="body"

hello-basic-version.
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="saveSent"

1
-----------------------------7db2a861008aa
Content-Disposition: form-data; name="action"

-----------------------------7db2a861008aa
Content-Disposition: form-data; name="a_sendmail"

发  送  
-----------------------------7db2a861008aa--

下面,就是要用WinInet API模拟以上三个过程就好了!

[cpp] view plaincopyprint?
  1. /******************************************************************
  2. *   向奋战在刀光剑影中的特洛伊勇士们致敬
  3. *   2011.11.07
  4. *   于 南京航空航天大学  电子信息工程学院
  5. ******************************************************************/
  6. #include<windows.h>
  7. #include<wininet.h>
  8. #include <iostream>
  9. using namespace std;
  10. #pragma comment(lib,"wininet.lib")
  11. HINTERNET   hSession = NULL;
  12. HINTERNET   hConnect = NULL;
  13. HINTERNET   hRequest = NULL;
  14. //
  15. //构造邮件体
  16. //注意行与行中间没有空格
  17. //
  18. void BuildMailContent(PSTR szFormData)
  19. {
  20. strcpy(szFormData,"\
  21. -----------------------------7db2a861008aa\r\n\
  22. Content-Disposition: form-data; name=\"to\"\r\n\
  23. \r\n\
  24. jimmy_cmd@sina.com\r\n\
  25. -----------------------------7db2a861008aa\r\n\
  26. Content-Disposition: form-data; name=\"cc\"\r\n\
  27. \r\n\
  28. wangjian.nuaa@qq.com\r\n\
  29. -----------------------------7db2a861008aa\r\n\
  30. Content-Disposition: form-data; name=\"bcc\"\r\n\
  31. \r\n\
  32. \r\n\
  33. -----------------------------7db2a861008aa\r\n\
  34. Content-Disposition: form-data; name=\"subject\"\r\n\
  35. \r\n\
  36. subject-basic\r\n\
  37. -----------------------------7db2a861008aa\r\n\
  38. Content-Disposition: form-data; name=\"atth1\"; filename=\"\"\r\n\
  39. Content-Type: application/octet-stream\r\n\
  40. \r\n\
  41. \r\n\
  42. -----------------------------7db2a861008aa\r\n\
  43. Content-Disposition: form-data; name=\"atth2\"; filename=\"\"\r\n\
  44. Content-Type: application/octet-stream\r\n\
  45. \r\n\
  46. \r\n\
  47. -----------------------------7db2a861008aa\r\n\
  48. Content-Disposition: form-data; name=\"atth3\"; filename=\"\"\r\n\
  49. Content-Type: application/octet-stream\r\n\
  50. \r\n\
  51. \r\n\
  52. -----------------------------7db2a861008aa\r\n\
  53. Content-Disposition: form-data; name=\"body\"\r\n\
  54. \r\n\
  55. application-send : send content!\r\n\
  56. -----------------------------7db2a861008aa\r\n\
  57. Content-Disposition: form-data; name=\"saveSent\"\r\n\
  58. \r\n\
  59. 1\r\n\
  60. -----------------------------7db2a861008aa\r\n\
  61. Content-Disposition: form-data; name=\"action\"\r\n\
  62. \r\n\
  63. \r\n\
  64. -----------------------------7db2a861008aa\r\n\
  65. Content-Disposition: form-data; name=\"a_sendmail\"\r\n\
  66. \r\n\
  67. 发  送\r\n\
  68. -----------------------------7db2a861008aa--\r\n");
  69. }
  70. //
  71. //将返回的页面写入磁盘文件
  72. //
  73. BOOL WriteFileToDisk(LPCSTR lpFileName,HINTERNET& hInternet)
  74. {
  75. CHAR    szRecvBuf[1024+1];          // 接受数据缓冲区
  76. DWORD   dwNumberOfBytesRead;        // 服务器返回大小
  77. DWORD   dwRecvTotalSize=0;          // 接受数据总大小
  78. DWORD   dwRecvBuffSize=0;           // 接受数据buf的大小
  79. BOOL    bReturn = FALSE;
  80. memset(szRecvBuf,0,1024+1);
  81. DWORD   dwNumberOfBytesWritten ;
  82. HANDLE hOpenFile = (HANDLE)CreateFileA(lpFileName,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,NULL,NULL);
  83. if (hOpenFile == INVALID_HANDLE_VALUE)
  84. {
  85. hOpenFile = NULL;
  86. return FALSE;
  87. }
  88. do
  89. {
  90. bReturn = InternetReadFile(hInternet,szRecvBuf,1024,&dwNumberOfBytesRead);
  91. if(!bReturn)
  92. {
  93. break;
  94. }
  95. // 统计接受数据的大小
  96. szRecvBuf[dwNumberOfBytesRead] = '\0';
  97. dwRecvTotalSize += dwNumberOfBytesRead;
  98. dwRecvBuffSize  += strlen(szRecvBuf);
  99. WriteFile(hOpenFile,szRecvBuf,dwNumberOfBytesRead,&dwNumberOfBytesWritten,NULL);
  100. } while (dwNumberOfBytesRead !=0);
  101. CloseHandle(hOpenFile);
  102. return TRUE;
  103. }
  104. //
  105. //初始化HINTERNET 建立连接
  106. //
  107. BOOL InitionWinInet()
  108. {
  109. //InternetOpenA
  110. LPCSTR  lpszAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)";
  111. DWORD   dwAccessType = INTERNET_OPEN_TYPE_PRECONFIG;
  112. hSession = InternetOpenA(lpszAgent,dwAccessType,NULL,NULL,0);
  113. if (!hSession)
  114. {
  115. return FALSE;
  116. }
  117. return TRUE;
  118. }
  119. //
  120. //模拟点击登录邮箱
  121. //
  122. BOOL ClickToLoginEmail()
  123. {
  124. //InternetConnectA
  125. LPCSTR lpszServerName = "mail.sina.com.cn";
  126. INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT;
  127. DWORD dwService = INTERNET_SERVICE_HTTP;
  128. hConnect = InternetConnectA(hSession,lpszServerName,nServerPort,NULL,NULL,dwService,0,1);
  129. if (!hConnect)
  130. {
  131. return FALSE;
  132. }
  133. //HttpOpenRequestA
  134. LPCSTR  lpszVerb = "POST";
  135. LPCSTR  lpszObjectName = "cgi-bin/login.php"; //网站的对象名,网址在InternetConnectA第二个参数指定
  136. LPCSTR  lpszVersion = "HTTP/1.1";
  137. LPCSTR  lpszReferrer = "http://mail.sina.com.cn/cgi-bin/login.php";
  138. LPCSTR  lpszAcceptTypes = "text/html, application/xhtml+xml, */*";
  139. DWORD   dwFlags = INTERNET_FLAG_RELOAD;
  140. hRequest = HttpOpenRequestA(hConnect,lpszVerb,lpszObjectName,lpszVersion,lpszReferrer,&lpszAcceptTypes,dwFlags,1);
  141. if (!hRequest)
  142. {
  143. return FALSE;
  144. }
  145. //HttpSendRequestA
  146. LPCSTR  lpszHeaders = "Content-Type: application/x-www-form-urlencoded\r\n";
  147. DWORD   dwHeadersLength=-1L;
  148. char    szFormData[1024]={0};
  149. strcpy(szFormData,"logintype=uid&u=jimmy_cmd&psw=123abc&product=mail&%B5%C7%C2%BC=%B5%C7+%C2%BC\r\n");
  150. LPVOID pBuf = (LPVOID)szFormData;
  151. BOOL bReturn = HttpSendRequestA(hRequest,lpszHeaders,dwHeadersLength,pBuf,strlen(szFormData));
  152. if(!bReturn)
  153. {
  154. return FALSE;
  155. }
  156. LPCSTR  lpFileName = "login.html";
  157. WriteFileToDisk(lpFileName,hRequest);
  158. return TRUE;
  159. }
  160. //
  161. //模拟点击到基本版
  162. //
  163. BOOL ClickToBasicVersion()
  164. {
  165. LPCSTR lpszUrl = "http://m1.mail.sina.com.cn/basic/";
  166. hRequest = InternetOpenUrlA(hSession,lpszUrl,NULL,0,INTERNET_FLAG_RELOAD,0);
  167. if (!hRequest)
  168. {
  169. return FALSE;
  170. }
  171. LPCSTR  lpFileName = "basic.html";
  172. WriteFileToDisk(lpFileName,hRequest);
  173. return TRUE;
  174. }
  175. //
  176. //模拟点击写信按钮
  177. //
  178. BOOL ClickToWrite()
  179. {
  180. LPCSTR lpszUrl = "http://m1.mail.sina.com.cn/basic/writemail.php ";
  181. hRequest = InternetOpenUrlA(hSession,lpszUrl,NULL,0,INTERNET_FLAG_RELOAD,0);
  182. if (!hRequest)
  183. {
  184. return FALSE;
  185. }
  186. LPCSTR  lpFileName =  "write.html";
  187. WriteFileToDisk(lpFileName,hRequest);
  188. return TRUE;
  189. }
  190. //
  191. //模拟点击发送邮件
  192. //
  193. BOOL ClickSendEmail()
  194. {
  195. //InternetConnectA
  196. LPCSTR lpszServerName = "m1.mail.sina.com.cn";
  197. INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT;
  198. DWORD dwService = INTERNET_SERVICE_HTTP;
  199. hConnect = InternetConnectA(hSession,lpszServerName,nServerPort,NULL,NULL,dwService,0,1);
  200. if (!hConnect)
  201. {
  202. return FALSE;
  203. }
  204. //HttpOpenRequestA
  205. LPCSTR  lpszVerb = "POST";
  206. LPCSTR  lpszObjectName = "basic/sendmail.php"; //网站的对象名,网址在InternetConnectA第二个参数指定
  207. LPCSTR  lpszVersion = "HTTP/1.1";
  208. LPCSTR  lpszReferrer = "http://m1.mail.sina.com.cn/basic/writemail.php";
  209. LPCSTR  lpszAcceptTypes = "text/html, application/xhtml+xml, */*";
  210. DWORD   dwFlags = INTERNET_FLAG_RELOAD;
  211. hRequest = HttpOpenRequestA(hConnect,lpszVerb,lpszObjectName,lpszVersion,lpszReferrer,&lpszAcceptTypes,dwFlags,1);
  212. if (!hRequest)
  213. {
  214. return FALSE;
  215. }
  216. //HttpSendRequestA
  217. LPCSTR  lpszHeaders = "Content-Type: multipart/form-data; boundary=---------------------------7db2a861008aa\r\n";
  218. DWORD   dwHeadersLength=-1L;
  219. CHAR    szContentData[10240]={0};
  220. BuildMailContent(szContentData);
  221. LPVOID pBuf = (LPVOID)szContentData;
  222. BOOL bReturn = HttpSendRequestA(hRequest,lpszHeaders,dwHeadersLength,pBuf,strlen(szContentData));
  223. if(!bReturn)
  224. {
  225. return FALSE;
  226. }
  227. return TRUE;
  228. }
  229. //
  230. //主函数
  231. //
  232. void main()
  233. {
  234. BOOL isOK = FALSE ;
  235. do
  236. {
  237. if (!InitionWinInet()){
  238. break;
  239. }
  240. cout<<"InitionWinInet finished."<<endl;
  241. if (!ClickToLoginEmail()){
  242. break;
  243. }
  244. cout<<"ClickToLoginEmail finished."<<endl;
  245. if (!ClickToBasicVersion()){
  246. break;
  247. }
  248. cout<<"ClickToBasicVersion finished."<<endl;
  249. if (!ClickToWrite()){
  250. break;
  251. }
  252. cout<<"ClickToWrite finished."<<endl;
  253. if (!ClickSendEmail()){
  254. break;
  255. }
  256. cout<<"ClickSendEmail finished."<<endl;
  257. } while (FALSE);
  258. cout<<"Press any key to quit."<<endl;
  259. getchar();
  260. InternetCloseHandle(hSession);
  261. InternetCloseHandle(hConnect);
  262. InternetCloseHandle(hRequest);
  263. }

测试得到的,写入磁盘的html文件可以辅助直观感受这个过程,也展示一下:

WinInet进阶:发送邮件相关推荐

  1. 进阶的阿牛哥之用python向多人发送邮件(带附件)、遍历邮件获取内容(两种方法:imbox、imaplib)

    (一)向多人发送邮件(带附件) 一.使用的库 这个程序涉及两个库:smtplib 和 email 这两个库都是Python自带的,所以不需要额外的下载安装. 二.思路和步骤 总体思路很简单,就像我们平 ...

  2. 高效办公,如何利用Python自动发送邮件

    自动发送邮件 我们把报表做出来以后一般都是需要发给别人查看,对于一些每天需要发的报表或者是需要一次发送多份的报表,这个时候可以考虑借助Python来自动发送邮件. 使用邮箱的第一步 一般我们在使用QQ ...

  3. Spring Boot中使用JavaMailSender发送邮件

    相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看 ...

  4. java 发送邮件_老板要实现SpringBoot发送邮件?大神发了这篇文章后,今晚准点下班...

    正文开始前,分享阿里 P8 资深架构师吐血总结的 <Java 核心知识体系&面试资料.pdf> 阿里 P8 级资深架构师吐血总结的一份 Java 核心知识.pdf, 内容覆盖很广, ...

  5. android+发邮件,Android发送邮件的方法实例详解

    Android发送邮件的方法实例详解 时间:2021-05-20 本文实例讲述了Android发送邮件的方法.分享给大家供大家参考,具体如下: 在android手机中实现发送邮件的功能也是不可缺少的. ...

  6. SpringBoot之发送邮件

    1.pom配置 <dependencies><dependency><groupId>org.springframework.boot</groupId> ...

  7. [安全攻防进阶篇] 七.恶意样本检测之编写代码自动提取IAT表、字符串及时间戳溯源

    系统安全绕不开PE文件,PE文件又与恶意样本检测及分析紧密相关.前文作者带领大家逆向分析两个CrackMe程序,包括逆向分析和源码还原.这篇文章主要介绍了PE文件基础知识及恶意样本检测的三种处理知识, ...

  8. (转载)SpringBoot 发送邮件和附件

    什么是SMTP? SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP认证要 ...

  9. scrapy学习笔记(二)进阶使用

    From:https://www.imooc.com/article/21839 scrapy提升篇之配置:https://segmentfault.com/a/1190000009321902 前面 ...

最新文章

  1. C++builder XE 安装控件 及输出路径
  2. 独家 | 一文盘点数据集市和数据仓库的差异(附链接)
  3. Django模型(三)
  4. ftp获取远程Pdf文件
  5. GNU/Linux下有多少是GNU的?
  6. 自动推荐图表、智能分析,这个新出的分析工具有点酷!
  7. 计算机系统设计 片上系统 pdf,一种基于过程级编程模型的可重构片上系统设计方法.pdf...
  8. 10-10-定时邮件发送
  9. 【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired @Qualifier @Primary
  10. mysql游标嵌套怎么写,mysql游标和嵌套游标
  11. JAVA8免费下载安装(win10)
  12. 将mysql驱动包添加到项目依赖
  13. HSF框架日常问题记录1
  14. px和毫米的换算_px与厘米换算(px怎么转换为cm)
  15. JAVA基础篇-数据依赖性含义
  16. e 服务器怎么注册不了怎么办,IMVU注册不了怎么办 服务器错误怎么办
  17. 推荐中使用FNN/PNN/ONN/NFM优化特征交叉
  18. VCS和Verdi的安装解决问题记录
  19. python地产成本_Python3抓取 深圳房地产均价数据,通过真实数据为购置不动产做决策分析(二)...
  20. 为什么要配置Java环境变量以及Java环境变量的配置

热门文章

  1. js中转换Date日期格式
  2. (附源码)计算机毕业设计ssm黑河市劳务人员管理系统
  3. Rouge的安装与使用
  4. comsol结构力学-应力应变仿真
  5. 【数据库】数据库编程
  6. 从零搭建WebApi接口开发框架-接口规范
  7. Sublime Text 3 装了Anaconda 写Python代码出现框框的解决办法
  8. 第一性原理计算筛选本征二维磁性材料
  9. 英语单词 One 个人 2. 出生和死亡
  10. 文件的下载(2)——解决下载文件名的乱码问题