gpt4 book ai didi

c - 在 Linux 中使用 SMTP 通过 C 发送电子邮件

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:54 25 4
gpt4 key购买 nike

我试图用 c 语言发送电子邮件,但在握手、确认消息和打印消息发送后,它没有将邮件发送到我的收件箱。我的整个代码执行成功。你能帮忙吗,谢谢。

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define BUFFEr_SIZE 4096

void error(char *msg)
{
perror(msg);
exit(0);
}

int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;

char buffer[BUFFEr_SIZE];
if (argc < 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(0);
}
portno = atoi(argv[2]);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}

bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");

n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

bzero(buffer,BUFFEr_SIZE);

/*------------------------------*/
printf("\nDONE\n");
printf("EHLO");

strcpy(buffer,"ehlo smtp.gmail.com\n");

n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

/*------------------------------*/

/*------------------------------*/
printf("\nDONE EHLO\n");
printf("AUTH");

strcpy(buffer,"AUTH LOGIN\n");

n = write(sockfd,buffer,strlen(buffer)+1);
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

/*------------------------------*/

/*------------------------------*/
printf("\nDONE AUTH\n");
printf("AUTH UID");

strcpy(buffer,"xxxx@gmail.com");

n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

/*------------------------------*/

/*------------------------------*/
printf("\nDONE UID\n");
printf("AUTH PWD");

strcpy(buffer,"xxxxxx");

n = write(sockfd,buffer,strlen(buffer)+1);
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

/*------------------------------*/

/*------------------------------*/

printf("MAIL FROM");

strcpy(buffer,"MAIL FROM: xxxxx@gmail.com");

n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

/*------------------------------*/

/*------------------------------*/

printf("MAIL TO");


strcpy(buffer,"RCPT TO: aaaaa@gmail.com");

n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);

/*------------------------------*/

/*------------------------------*/
printf("DONE MAILTO\n");

printf("DATA");

strcpy(buffer,"DATA\r\n");

n = write(sockfd,buffer,strlen(buffer));

strcpy(buffer,"Subject: test\r\n");

n = write(sockfd,buffer,strlen(buffer));

strcpy(buffer,"SMTP MAIL TOOL TEST WORKS!!!\r\n");

n = write(sockfd,buffer,strlen(buffer));

strcpy(buffer,"\n\n");

n = write(sockfd,buffer,strlen(buffer));

strcpy(buffer,".\n");

n = write(sockfd,buffer,strlen(buffer));


/*------------------------------*/

/*------------------------------*/
printf("SON DONE");
strcpy(buffer,"quit\n");

n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,BUFFEr_SIZE);
n = read(sockfd,buffer,BUFFEr_SIZE-1);
if (n < 0)
error("ERROR reading from socket");
puts(buffer);

/*------------------------------*/

return 0;
}

输出在这里:

220 smtp.gmail.com ESMTP bh6sm124854736wjb.0 - gsmtp

完成 EHLO250-smtp.gmail.com 为您服务,[85.98.184.204]

250-尺寸 35882577

250-8位MIME

250-STARTTLS

250-增强状态代码

250-流水线

250-分块

250 个 SMTPUTF8

完成 EHLO AUTH451 4.5.0 SMTP 协议(protocol)违规,请参阅 RFC 2821 bh6sm124854736wjb.0 - gsmtp

完成授权

授权 UID

完成 UID

授权密码

邮件来自

邮寄至

完成邮寄

数据完成

最佳答案

发送 AUTH LOGIN 命令后,SMTP 服务器返回 451 4.5.0 SMTP 协议(protocol)违规,请参阅 RFC 2821。看着RFC 2181 , 该指令不存在。

此命令是 SMTP 的扩展,此邮件服务器不支持。如果删除身份验证命令,它应该可以工作。

此外,在继续测试时,一定要查看程序的输出以确保服务器不再返回任何错误。如果是,请检查标准以了解为什么会出现这些错误。

关于c - 在 Linux 中使用 SMTP 通过 C 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com