c 测试服务器发送邮件,用C发送电子邮件,服务器在我发送正文后从不回复

作者分享了用C语言实现SMTP邮件发送过程中遇到的问题,着重于如何在`SendAnEmail`函数中正确标识邮件正文结束,以使邮件服务器能正确响应。通过解析服务器交互,发现可能需要在数据阶段添加特定的终止符,如在telnet中使用的`.`
摘要由CSDN通过智能技术生成

我已经创建了一个用C语言发送电子邮件的小程序。

我做了3个功能:

连接:使用套接字连接到服务器,

send和cieve:向邮件服务器发送和接收消息,

sendanemail:写下sendanecieve发送的文本。

Connect和Send和Cieve工作正常。

我的问题出在sendanemail上。我不知道如何完成数据步骤。

对于每个命令,我接收服务器的响应:250******

但对于数据1,它在第一个354中回复,但在最后一次完全停止后从不回复250。我认为它和telnet是相同的协议。

最后一次完全停止=车身末端。

但它不起作用。邮件服务器从不回复。

有人知道要告诉服务器我写完了正文的解决方案吗?

代码

SOCKET connexion(char* server_name,unsigned short port)

{

char buf[1024]={0};

int res_l= 0;

int nbrecv;

struct sockaddr_in serverSockAddr;

struct hostent * serverHostEnt;

SOCKET to_server_socket = 0;

serverHostEnt = gethostbyname( server_name );

if ( serverHostEnt == NULL ) {

res_l = h_errno;

return (SOCKET)-1; }

memcpy(&serverSockAddr.sin_addr,serverHostEnt->h_addr, serverHostEnt->h_length );

serverSockAddr.sin_port = htons( port );/

serverSockAddr.sin_family = AF_INET;

/* Create socket */

to_server_socket = socket( AF_INET, SOCK_STREAM, 0 );

/* connexion request*/

if( connect( to_server_socket, ( struct sockaddr * ) &serverSockAddr,sizeof( serverSockAddr ) ) < 0 )

return (SOCKET)-3;

while( !buf[0] ) nbrecv = recv( to_server_socket, buf, 1024, 0 );

printf("Welcome message : %s\n",buf);

return to_server_socket;

}

void SendAndReceive(SOCKET to_server_socket, char * messagesend)

{

char bufreceive[1024];

int size,retVal,nbrecv;

size = (int)strlen( messagesend );

// SEND THE MESSAGE

retVal = send( to_server_socket, messagesend, size, 0 );

printf("Envoye : %s\n",messagesend) ;

// WAIT THE ANSWER

memset(bufreceive,0,1024);

while(!bufreceive[0])

nbrecv = recv( to_server_socket, bufreceive, 1024, 0 );

printf("Recu : %s\n",bufreceive);

}

void SendAnEmail(SOCKET sock)

{

//ehlo

SendAndReceive(sock, "EHLO localhost\r\n");

//mail from

SendAndReceive(sock, "MAIL FROM:

//rcpt to

SendAndReceive(sock, "RCPT TO:\r\n");

/data

SendAndReceive(sock, "DATA\r\n");

//Subject : Subject

//

//Body

//.

SendAndReceive(sock, "Subject : Subject\r\n\r\nBody\r\n.\r\n");

//quit

SendAndReceive(sock, "QUIT\r\n");

}

在主服务器中,必须设置端口=25,使用真正的SMTP服务器作为服务器名,并添加包含winsock2.h的库。

CMD:

Welcome message : 220 mwinf5d05 ME ESMTP server ready

S: EHLO localhost

R: 250-mwinf5d05 hello [10.162.66.36], pleased to meet you

250-HELP

250-AUTH LOGIN PLAIN

250-SIZE 44000000

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 OK

S: MAIL FROM:

R: 250 2.1.0 sender ok

S: RCPT TO:

R: 250 2.1.5 recipient ok

S: DATA

R: 354 enter mail, end with "." on a line by itself

S: Subject: FlashRad

Ceci est un test.

.

我希望自己使用telnet时能够做到:

就像这里面的解释

website

.

有人知道怎么说我写完了尸体吗?

就像最后一站用telnet。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值