@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

System.Web.MailとOutlookの関係 (VB.netでのメール送信について)

1
投稿者投稿内容
hideji
会議室デビュー日: 2008/06/23
投稿数: 12
お住まい・勤務地: 愛知・名古屋市
投稿日時: 2009-03-11 10:32
いつもお世話になっております。
少しだけ皆様のお知恵をお借りできればと思い投稿させていただきました。

VB.net2003、.NetFramework1.1でメール送信の機能を作成しました。
開発環境でテストを行いメール送信を確認。その後実行環境でもテストを行いメール送信を確認することができていたのですが、あるときメール送信の際にエラーが発生し、メールの送信が一切できなくなりました。

・エラー文
'CDO.Message' オブジェクトにアクセスできませんでした。0x80040220-' SendUsing ' 構成値が無効です。

過去スレッドにも同じエラー文があり確認したところ、SMTPサーバの指定についての記述がありました。しかし、一応SMTPサーバの指定はしているので違うかと…

エラー発生後、様々なことを試しながら解決策を探っていると

1.Outlookを起動させた後、メール送信が可能となることが分かりました。(原因は不明)

2.更に起動30分後にはメール送信ができなくなることも分かりました。
POP before SMTPが絡んでいると思いますが、POP before SMTPの失敗時に出力されるエラー文ではないですし…

正直検討がまったくつかない状況です。
Outlookを起動させないとSystem.Web.Mailで送信できないという状況は今までなかったんですが…


ソースコード-------------------------------------------------------

Dim mm As New System.Web.Mail.MailMessage

' POPログインします。
pop.Login(username, password)

mm.From = "xxxxxxxx@xxxx.co.jp"
'送信先アドレス
mm.To = "xxxxxxxx@xxxx.co.jp"
'題名
mm.Subject = "題名"
'本文
mm.Body = ""
'添付ファイル
Dim attachment As New System.Web.Mail.MailAttachment("添付ファイル", _
System.Web.Mail.MailEncoding.Base64)

mm.Attachments.Add(attachment)

'JISコードに変換する
mm.BodyEncoding = System.Text.Encoding.GetEncoding(50220)

'user id
mm.Fields.Item( _
"http://schemas.microsoft.com/cdo/configuration/sendusername") _
= "xxxxx"

'pass
mm.Fields.Item( _
"http://schemas.microsoft.com/cdo/configuration/sendpassword") _
= "xxxxxx"

'SMTPサーバーを指定する
mm.Fields.Item( _
"http://schemas.microsoft.com/cdo/configuration/smtpserver") _
= "xxxxx.co.jp"

'ポート番号を指定する
mm.Fields.Item( _
"http://schemas.microsoft.com/cdo/configuration/smtpserverport") _
= 25

'送信する
エラー発生!! System.Web.Mail.SmtpMail.Send(mm)

'POP切断
pop.Close()

---------------------------------------------------------------


上記ソースコードとなっております。
おかしな文章、表現があるかと思いますが、お力添えの方よろしくお願いいたします。
リンダオ
会議室デビュー日: 2009/03/10
投稿数: 5
投稿日時: 2009-03-11 11:25
どもども、VBベビープログラマです。
コードをざっくりと拝見しましたが、SMTPサーバーの指定を行う前に

mm.Fields.Item( _
"http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

を書き足してあげればいけそうな気がしますが^^;;。

Fields.item("http://schemas.microsoft.com/cdo/configuration/sendusing")ですが、

1=ローカルSMTPサービスのピックアップ・ディレクトリにメールを配置する(デフォルトの動作)
2=SMTPポートに接続して送信する
3=OLE DBを利用してローカルのExchangeに接続する
だったと思います。
お試しくださいませ。
hideji
会議室デビュー日: 2008/06/23
投稿数: 12
お住まい・勤務地: 愛知・名古屋市
投稿日時: 2009-03-11 14:25
返信ありがとうございます。

リンダオさんのご指摘どおりコードを追加したところ動作しました。

sendusingの説明も加えていただき、とても分かりやすく理解することができました。

リンダオさん本当にありがとうございました。
1

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