首页 > 其他 > 详细

发送邮件

时间:2021-01-19 19:25:31      阅读:24      评论:0      收藏:0      [点我收藏+]
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <unistd.h>
#include <netinet/in.h>
#include <limits.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <ctype.h>
 
bool CFileUploadFTP::SendAlarmMail(std::string file, uint32_t size, std::string recv_mail_addr)
{
	const char* szServer = "smtp.126.com";
	short nPort = 25;
	int sockfd;
	struct sockaddr_in server_addr;
	struct hostent *host;
	//取得主机IP地址
	if((host=gethostbyname(szServer))==NULL)
	{
		logn_error(5,"gethostname error: [%s]", strerror(errno));
		return false;
	}
	//建立SOCKET连接
	if((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
	{
		logn_error(5,"Socket Error:[%s]>", strerror(errno));
		return false;
	}
	// 客户程序填充服务端的信息
	bzero(&server_addr,sizeof(server_addr));
	server_addr.sin_family=AF_INET;
	server_addr.sin_port=htons(nPort);
	server_addr.sin_addr=*((struct in_addr *)host->h_addr);
	//客户程序发起连接请求
	if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
	{
		logn_error(5,"Connect Error:[%s]>", strerror(errno));
		return false;
	}

	char szBuf[1024] = {0};
	char buf[256] = {0};
	char server[256] = {0};
	gethostname(server,256);
	strcpy(buf, "HELO ");
	strcat(buf, szServer);
	strcat(buf, " \r\n");
	// Wait for a reply
	recv(sockfd,szBuf,sizeof(szBuf)+1,0); 
	send(sockfd, buf, strlen(buf), 0);

	recv(sockfd, szBuf, sizeof(szBuf), 0); 
	//发送准备登陆信息
	send(sockfd, "AUTH LOGIN\r\n", strlen("AUTH LOGIN\r\n"), 0);
	recv(sockfd, szBuf, sizeof(szBuf), 0); 
	//发送用户名和密码,必须用base64进行转码,对于126邮箱来说用户名是@前面的字符串
	send(sockfd,"转码后的用户名\r\n", strlen("转码后的密码\r\n"),0); 
	recv(sockfd, szBuf, sizeof(szBuf),0);
	send(sockfd,"WnlqXzIxNjU5Mw==\r\n", strlen("WnlqXzIxNjU5Mw==\r\n"), 0); 
	recv(sockfd, szBuf, sizeof(szBuf),0); 
	logn_info(5,"\nrecv login rerurn info:%s", szBuf);
	//发送[发送邮件]的邮箱,该邮箱要与用户名一致,否则发送不成功
	send(sockfd,"MAIL FROM: <xxxx@126.com>\r\n",strlen("MAIL FROM: <xxxx@126.com>\r\n"),0);
	recv(sockfd, szBuf, sizeof(szBuf), 0);
	//发送[接收邮件]的邮箱
	char dat_buf[1024] = {0};
	sprintf(dat_buf, "RCPT TO: <%s>\r\n", recv_mail_addr.c_str());
	send(sockfd,dat_buf,strlen(dat_buf),0);
	recv(sockfd, szBuf, sizeof(szBuf), 0); 
	//发送主题  
	//char mail_data[1024] = {0}; 
	sprintf(dat_buf, "From: \"xxxx.126.com\"<xxxx@126.com>\r\nTo: %s\r\nSubject:file:[%s],size:[%d]\r\n", 	        recv_mail_addr.c_str(), file.substr(12).c_str(), size);
        //告诉邮件服务器,准备发送邮件内容
	send(sockfd,"DATA\r\n", strlen("DATA\r\n"),0);
	//发送邮件标题
	send(sockfd,dat_buf, strlen(dat_buf),0);
	//发送邮件内容
	//send(sockfd,"hello 126\r\n", strlen("hello 126\r\n"),0);
	//发送邮件结束
	send(sockfd,"\r\n.\r\n", strlen("\r\n.\r\n"),0);
	//接收邮件服务器返回信息
	recv(sockfd,szBuf,sizeof(szBuf),0);  
	//发送结束会话标识
	send(sockfd,"QUIT\r\n", strlen("QUIT\r\n"),0);
	recv(sockfd,szBuf,sizeof(szBuf),0);  
	logn_info(5,"Data received QUIT: %s", szBuf);
	close(sockfd);

	return true;
}

  

调用方法:SendAlarmMail("/opt/dis/v1/work/personnel/150627B0016000200024_RYFZ_20210119171951.TXT", 1024000, "xxxx.163.com");

发送邮件

原文:https://www.cnblogs.com/change5/p/14299377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!