![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
質問です
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- オープンソース AutoHotkey KeyWaitコマンドについて 下記サンプルコードにて5行目と9行目にKeyW 1 2023/03/02 21:26
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- 戦争・テロ・デモ ウクライナ、メル友に五千円要求されてさ 1 2022/04/02 09:38
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
c言語でユーザ関数を利用して入...
-
テキストデータをそのままバイ...
-
C言語について。
-
アルファベットの並べ替え
-
CStringをwchar_tに変換したい
-
int main()の・・・
-
Visual Studio strcpyについて
-
C言語の入力した文字を反転させ...
-
3桁区切(コンマ)記号をつけ...
-
文字列から空白を取り除きたい...
-
-'0'の意味について
-
ncursesで...
-
c言語プログラミング実行時エラ...
-
C++ Switch文について
-
分割した単語の頻出頻度を表示...
-
”あいうえお” を ”おえういあ...
-
半角カナ→16進
-
switch文で文字を比較すること...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
テキストデータをそのままバイ...
-
charでの計算?
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
atoi( ) の反対をやりたい
-
2曲同時再生するにはどうした...
-
C言語の入力した文字を反転させ...
-
配列をnビットシフトする
-
3桁区切(コンマ)記号をつけ...
-
int main()の・・・
-
型変換
-
CStringをwchar_tに変換したい
-
'const char *' 型は 'char *' ...
-
間接操作のレベルとは
-
double型の値をchar配列に変換...
-
絶対パスからのファイル名の切...
-
switch文で文字を比較すること...
-
c++ 文字列を入力して、一文字...
おすすめ情報