
質問です
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件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>添付ファイルのサイズが大きいもの(500000行を超えるような)を1行ずつsendメソッドで送信すると送信先で受信できません。
メールにはISPにより「最大行数」または「最大サイズ」に制限があります。
とあるISPでは5MB、とあるISPでは1MB、とあるISPでは30万行と、ISPごとに「最大値」はバラバラです。また、一部のISPでは最大値を設けていない場合もあります。
また、メールを受信するサーバーに制限が無くとも、中継するサーバーに制限がある場合もあり「送れるかどうかは、実際に送ってみないと判らない」というのが現状です。
ご回答ありがとうございます。
ご回答頂いた点ですが、
phpのプログラムからは正常に送れていますので
サーバ側に問題はないと考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringをwchar_tに変換したい
-
strncpyと_tcsncpy_sのヌルの扱...
-
ASCII変換について
-
テキストデータをそのままバイ...
-
WORDをcharに変換する方法
-
ftoa の作り方
-
PING JPEGファイルのExif規格の...
-
scanf()について教えてください
-
double型の値をchar配列に変換...
-
至急!C言語文字列置換
-
fgetsなどのときのstdinのバッ...
-
PROCのコンパイルエラーの取り...
-
引数の渡し方と受け方(argv)
-
c#でbmp画像の上下反転
-
間接参照のレベルが異なっています
-
charからLPTSTRへの変換方法
-
c言語プログラミング実行時エラ...
-
型変換
-
ネットワークにつながっている...
-
c言語配列の結合についてです。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
テキストデータをそのままバイ...
-
ネットワークにつながっている...
-
fgetsなどのときのstdinのバッ...
-
double型の値をchar配列に変換...
-
atoi( ) の反対をやりたい
-
charからLPTSTRへの変換方法
-
'const char *' 型は 'char *' ...
-
間接操作のレベルとは
-
c言語プログラミング実行時エラ...
-
c++ 文字列を入力して、一文字...
-
【C言語】構造体内の領域解放(...
-
間接参照のレベルが異なっています
-
C言語の入力した文字を反転させ...
-
構造体のアライメント調整
-
strncpyと_tcsncpy_sのヌルの扱...
-
TCP/IP通信型大文字・小文字変...
-
char型からのバイト数取得
おすすめ情報