NMSMTPを使ってメールを送信するものを作ってるんですが
送信された本文を見ると空白行が一番上に挿入されています。
なにかNMSMTPの設定で変えられないんでしょうか?
ちなみに送信部分のコードは
NMSMTP1.PostMessage.FromAddress:= Edit1.Text;
NMSMTP1.PostMessage.FromName := Edit2.Text;
//件名
NMSMTP1.PostMessage.Subject := edtTitle.Text;
NMSMTP1.PostMessage.ToAddress.Add(cmbSendAddress.Text)
//本文
NMSMTP1.PostMessage.Body.Assign(memoBody.Lines);
NMSMTP1.SendMail;
です。Delphi5です。
よろしくお願いします。
メールのヘッダと本文の間には、「必ず」空行が1行入りますが、それ以外に挿入されるということでしょうか。
送ったメールをOutlookなどのメールソフトで見たときに
先頭行に半角空白文字が1つ入って改行されている状態です。
実際にメッセージのソースを見ると、ソースにも本文の前に
1行あります。OSはWindowsNTです。
よろしくお願いします。
内容は単純な物なのですよね?
例えば、
From: test
Subject: Test
Test
というメッセージを送ったときに、
From: test
Subject: Test
Test
となるということでしょうか。
前にも書いたとおり、本文の前に空行があるのはRFCにて定義されている「正常な動作」です。
ヘッダと本文を切り分けるために必要な行です。
それ以外に入るのであれば、考えられるのは
・プログラム
・サーバ
・メーラ
のどれかです。
問題がなければ、受信したメッセージのソースを提示してみてください。
ヘッダ部分と本文部分を、メッセージ上のイメージのまま(ヘッダと本文を分けずに)提示していただければ、もしかしたらわかるかもしれません。
余談になりますが、NMSMTPは使いづらくありませんか?
日本語処理は自前で必要ですし、日本語OS環境では添付ファイルの処理にバグがあるようですし。
受信したメールのソースです。
X-Apparently-To: ***********@yahoo.co.jp via web2205.mail.yahoo.co.jp; 18 Jun 2003 15:26:09 +0900 (JST)
X-Track: -40
Received: from ns.chin.ne.jp (***********)
by mta14.mail.yahoo.co.jp with SMTP; 18 Jun 2003 15:26:06 +0900 (JST)
Received: (qmail 22406 invoked from network); 18 Jun 2003 15:25:57 +0900
Received: from ***********.bbtec.net (HELO ***********) (220.55.136.32)
by ns.chin.ne.jp with SMTP; 18 Jun 2003 15:25:57 +0900
From: TestName<***********@chin.ne.jp>
To: ***********@yahoo.co.jp
Subject: Test
Mime-Version: 1.0
Content-Type: text/plain; charset=iso2022-jp
Test
以上です。正常だと本文のTestの前の空白行は1行だけです。
やはり、NMSMTPで送信すると1行余分についてしまいます。
ところで、NMSMTP以外で何かあるんでしょうか?
Content-Type: text/plain; charset=iso2022-jp
の設定をするとき、改行コードをつけていませんか?
単純に、
NMSMTP1.FinalHeader.Values['Content-Type'] := 'text/plain; charset=iso-2022-jp';
としていますか?
# FinalHeader.Assignなどで設定していませんか?
NMSMTP以外では、icsや、Indyがあります。
どちらも英語圏ですが、NMSMTPよりは使い勝手がよろしいかと。
# 私見ですが
早いレスありがとうございます。
Charsetはデザイン時にiso2022-jpに設定しています。
Content-Type: text/plain;というのがわかりません。
Subtypeはデザイン時にmtPlainにしてるんですが。
それとにしのさんが書かれてるとおり、
NMSMTP1.FinalHeader.Values['Content-Type'] := 'text/plain;
charset=iso-2022-jp';としたんですが変わりません。
NMSMTP1.PostMessage.Body.Assign(memoBody.Lines);がおかしいのかと思い
NMSMTP1.PostMessage.Bodyに一行ずつ追加してそのあとに
ListboxにNMSMTP1.PostMessage.Bodyの内容を表示させたんですが、
Listboxにはちゃんと空白行なしで表示されます。ということは、
NMSMTP1.PostMessage.Bodyの中には問題なく追加されていると思うんですが
「それが仕様だ」と言われればそれまでなんでしょうが、
何かこちらのおちどでそうなっているようで...
Bodyの内容と言うよりも、Headerのほうが問題なのだと思います。
OnSendStartのとき、NMSMTP1.FinalHeaderの最後の行は空白行ではないですか?
もし空白行なら、(なぜ空白行が入るかはわかりませんが)その行をDeleteしてみてください。
StringListは、最後に改行をつけるという仕様がありますので注意です。
つまり、エディタなどで
ABC[改行]
DEF[改行]
G[EOF] <---改行せず
として保存したものを、TStringList.LoadFromStringすると、
ABC[改行]
DEF[改行]
G[改行]
となってしまいます。
FinalHeaderをMemoに書き出してみました。
********** 以下 Memo内容 ***********
From: TestMessenger<bouya@****.co.jp>
To: gorogoro@****.co.jp
Subject: Test
Mime-Version: 1.0
Content-Type: text/plain; charset=iso2022-jp
************************************
となっています。
FinalHeaderのCountも5ですから正常だと思うんですが、
OSがWindowsNTというのがネックになっているんでしょうか?
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=058305
このあたりがまさにそれだと思いますが、ここにある対処法でも無理でしょうか。
Delphi-MLはまず最初にチェックしたんですが...
おかげで見事に1行目の空白行は取れました。
いまいち、理解に苦しむんですが、どちらが本当というのはないんでしょうが
先に様々な設定を済ましていざ送信っていうのが、
流れ的には正しいようなんですが、今回紹介いただいたものは
SendStartは実際送信の直前だからそうなんだと言われればそうなんですが
PostMessage.Bodyというプロパティがあるにもんですから
FinalHeaderで設定するというのが判りませんでした。
いろいろ勉強になりました。
どうも大変長い間お付き合いいただきありがとうございました。
それと、ICSをDLしてみようと思います。その件もありがとうございました。
Delphi5であれば、Indyのほうがよろしいかと思います。
Indy9.00.13が最新です。
余談ですが、Indy10が出ているようです。まだベータ版ですが。
Indy
http://www.nevrona.com/Indy/
にしのさん こんにちわ
Indy さっそくDLしてみました。バージョンは9.00.13です。
サンプルコードを見つけ、あっさりできました。
ただ、OEでいう送信者がメールアドレスで表示されるのがまだ
ヘルプをみてやってみようと思います。
Indyはあっちこっちで評判もいいみたいですね。
ありがとうございました。
ツイート | ![]() |