【洛谷P4718】【模板】Pollard-Rho演算法
阿新 • • 發佈:2021-01-19
#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: <[email protected]>\r\n",strlen("MAIL FROM: <[email protected]>\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\"<[email protected]>\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");