性格いい人が優勝

質問です
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;
}

上記で問題になっていそうなところがあれば
教えてください。。
よろしくお願いします。

A 回答 (1件)

>添付ファイルのサイズが大きいもの(500000行を超えるような)を1行ずつsendメソッドで送信すると送信先で受信できません。



メールにはISPにより「最大行数」または「最大サイズ」に制限があります。

とあるISPでは5MB、とあるISPでは1MB、とあるISPでは30万行と、ISPごとに「最大値」はバラバラです。また、一部のISPでは最大値を設けていない場合もあります。

また、メールを受信するサーバーに制限が無くとも、中継するサーバーに制限がある場合もあり「送れるかどうかは、実際に送ってみないと判らない」というのが現状です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご回答頂いた点ですが、
phpのプログラムからは正常に送れていますので
サーバ側に問題はないと考えています。

お礼日時:2009/08/25 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!