ソケット通信で大容量のメールの場合送信されません
質問です
smtpクライアントからtcpでメール送信するプログラムを組んだのですが、
添付ファイルのサイズが大きいもの(500000行を超えるような)を1行ずつsendメソッドで送信すると送信先で受信できません。
400000行まではいくのですが…
sendではエラーは返っておらずパケットは送られてる様です。
パケットダンプをとってみたのですが、メールサーバから応答は返ってきていました。
filein.open("test.eml");
if (filein.fail()){
return -1;
}
if((soc = ConnectHost("testhost","smtp",25)) == -1){
return -1;
}
send_buf = new char[BUFSIZ];
sprintf(send_buf,"MAIL FROM:<%s>\r\n","test@test.test");
SocketSend(soc,send_buf,strlen(send_buf));
sprintf(send_buf,"RCPT TO:<%s>\r\n","test2@test.test");
SocketSend(soc,send_buf,strlen(send_buf));
sprintf(send_buf,"DATA\r\n");
SocketSend(soc,send_buf,strlen(send_buf));
ss = new char[1024];
while (filein.getline(ss,1024)){
sprintf(send_buf,"%s\r\n",ss);
SocketSend(soc,send_buf,strlen(send_buf)); ←ここでループ
}
delete ss;
sprintf(send_buf,"\r\n.\r\n");
SocketSend(soc,send_buf,strlen(send_buf));
SocketRead(soc,send_buf);
delete send_buf;
filein.close();
if(SocketClose(soc) == -1){
return err;
}
int SocketSend(int soc,char* buff,int nbytes)
{
register int nleft,nwritten;
char* p = buff;
nleft = nbytes;
while(nleft > 0) {
nwritten = send(soc,p,nleft,0);
if(nwritten <= 0){
return nwritten;
}
nleft -= nwritten;
p += nwritten;
}
return 0;
}
int SocketClose(int soc)
{
int ret;
if(close(soc) == -1){
return -1;
}
return 0;
}
int SocketRead(int soc,char* buff)
{
int rbyte;
rbyte = read(soc,buff,strlen(buff));
return 0;
}
上記で問題になっていそうなところがあれば
教えてください。。
よろしくお願いします。
お礼
書き込みありがとうございます。 一応、解決しました。 今後ともよろしくお願いします。