- PR -

WinXP VS2003環境で、ファイルを添付したメール送信ができない

1
投稿者投稿内容
やまぐち03
会議室デビュー日: 2004/04/13
投稿数: 12
投稿日時: 2008-03-26 11:55
毎々お世話になっております。

Windows XP Pro
Visual Studio 2003にて、
C# コンソールアプリケーションの保守を行っています。

ここで、System.Web.Mail 名前空間のメール送信クラスを
使用してメールを送信している処理があるのですが、ファイルを添付しない場合は問題なくメールが遅れるのですが、ファイルを添付するとエラーになってしまいます。
今まで Windows2000 Proで開発していた時は動いていたのですが、XPにした途端動かなくなってしまいました。

コードですが以下になります。
============================================================================
using System.Web.Mail;

MailMessage msg = new MailMessage();
msg.From = "XXXXXX@XXXX.jp"; //実在するメールアドレスを記載
msg.To = "XXXXXX@XXXX.jp"; //実在するメールアドレスを記載
msg.Subject = "test";
msg.Body = "testaaa";
msg.Attachments.Add(new MailAttachment(@".\\\\test.txt", MailEncoding.Base64));

SmtpMail.SmtpServer = "XXX.XXX.XXX.XXX"; //実在するSMTPサーバをIPアドレスで指定
SmtpMail.Send(msg);
============================================================================

エラーですが、お決まりの、”'CDO.Message' オブジェクトにアクセスできませんでした。”でした。。。
InnerExceptionですが、
 System.Reflection.TargetInvocationException
 ”呼び出しのターゲットが例外をスローしました。”
更にInnerExceptionが
 System.Runtime.InteropServices.COMException
 ”指定されたプロトコルは不明です。”
でした。

InnerExceptionの部分についても調べましたが、技術不足で原因を特定することはできませんでした。

他に試したことですが、
 ・Windows FireWall を無効にする
 ・VS2005で同じコードを実行してみる ⇒ 同様のエラーとなります
 ・VS2005でSystem.Net.Mailに代謝して実行 ⇒ 問題なく送信可能
 ・ローカルにはOffice2003がインストールされているが、CDOもインストールされている

CDOか何かがおかしいのかなと思っているのですが、どなたかアドバイスいただけませんでしょうか?
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-26 19:15
できあがったコードを他の OS、2000 とか Server 2003 とかに持っていくと、どうなりますか?
(問題の切り分け)
やまぐち03
会議室デビュー日: 2004/04/13
投稿数: 12
投稿日時: 2008-03-26 19:49
Jitta様

いつもお世話になっております。

先に記載しましたソースをReleaseでビルドし、以下環境に配置し実行しました。
 ・Windows2000 Server SP3
 ・Windows2003 Server Standard Edition SP1
※どちらのサーバも、以前Windows2000でコンパイルしたアプリは問題なく動いていました。

結果はローカルでデバッグした時と同様エラーになってしまいました。
エラーメッセージも一緒です。
因みに、VS2003については、SP1を当ててあります。
それと、ローカルのOS Windows XP Pro(SP2)に関しては、ドメインに参加していて様々な制限がついているようです。


引き続きよろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-26 21:10
その XP のアセンブリだけが、何らかの修正でおかしくなったのかな?と、思ったのですが、違うようですね。

ところで、円マークはおかしくなるので全角にしますが、

> msg.Attachments.Add(new MailAttachment(@".¥¥¥¥test.txt", MailEncoding.Base64));

本当にこう書いてあります?掲示板の都合で増殖しただけで、本当は2つ?
"@" マークを付けるなら、円マークは1つでいいはず。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-03-26 21:37
引用:

"@" マークを付けるなら、円マークは1つでいいはず。



それ以前に、カレントディレクトリをあてにしているのが間違いなんじゃ?

プログラマが想定しているカレントディレクトリと、添付ファイルが実際に存在するフォルダが一致してないだけな気が。
やまぐち03
会議室デビュー日: 2004/04/13
投稿数: 12
投稿日時: 2008-03-27 08:41
Jitta様 渋木様

御返信ありがとうございます。

ソースコードをコピペする際に、なぜか『¥』が増えてしまったようです。
実際には、『.¥test.txt』でした。混乱させてしまいすみません。

引用:


それ以前に、カレントディレクトリをあてにしているのが間違いなんじゃ?




添付しようとするファイルが無い場合は、msg.Attachments.Add のタイミングで、
 『メールアタッチメント”.¥test.txt”が無効です』
というエラーを吐くので、パスが間違っている事は無い!と思っていました。が、、、、、
実際に渋木様の言うとおり、試しに絶対パスに変えて動かしてみたところ、、、
なんと動きました!!!

メールを添付する際にはエラーにならずに、送信する際にエラーになってしまう。。。私の認識が間違っていたようです。以前動いていたものも見てみましたが、確かに保存先のパスが絶対パスになっていました、、、

お二人お蔭で解決することができました!いつも助けていただいております。
どうもありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)