- PR -

◆添付したメールを作成したい。

1
投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-14 19:28
WindowsXP Visuai Basic 2005 Exprese Edition でWindowsアプリケーションを開発
しClickOnceで十数箇所にテスト配布をしています。テストはうまくいっていますが各所で作
成した月次データ(圧縮して)メールで回収するためのボタンを配置し、このボタンを押すと月
次データを添付して本部宛にメール送信するようにプログラムして、正常に動作しています。
ソースは以下の通りです。
コード:

Dim Maill_To As String = To_Name@abcd.or.jp '------------宛先のメールアドレス
Dim Maill_From As String = From_Name@abcd.or.jp '------送信元のメールアドレス
Dim Maill_Smtp As String = abcd.mail.abcd.or.jp '----------SMTPサーバー名
Dim gzipFile As String = C:\-\My Documents\File1.gz'--------圧縮File FullPass

Dim msg As New System.Net.Mail.MailMessage() '--------------MailMessageの作成
msg.From = New System.Net.Mail.MailAddress(Maill_To) '-----------------送信者
msg.To.Add(New System.Net.Mail.MailAddress(Maill_From)) '----------------宛先
msg.Subject = "月次データをテスト送信しました。" '-----------------------件名
msg.Body = "月次データをテスト送信しました。" '--------------------------本文
Dim attach1 As New System.Net.Mail.Attachment(gzipFile)
msg.Attachments.Add(attach1)
Dim sc As New System.Net.Mail.SmtpClient()

sc.Host = Maill_Smtp '-------------------------------- SMTPサーバーを指定する
sc.Send(msg) '-------------------------------------------メッセージを送信する
msg.Dispose() '--------------------------------------------------------後始末
MessageBox.Show("正常に月次データを送信しました。")



【質問内容】
この方法で、実際に配布し、クライアントの要望から次のような問題を感じて、むしろSend
コマンドなどで自動的に送信することを疑問に思っています。

1.各クライアントにSMTPサーバ名を各自で設定させるのが大変面倒であること
2.自動メール送信の実行に対してスパイウェアのような、うしろめたさを感じること
3.とわ言えClickOnce 配布によるデータファイルの添付設定は、複雑すぎること

以上のことからエクスプローラで右クリックして表示されるリストの「送る」→「メール受信者」
(MAPIMAIL)と同じように、下の項目が設定されたメールを作成し、[送信]ボタンを押せば
いい状態にして表示させる方法はあるのでしょうか?。もしあるならSMTPサーバ名の設定
や自動メール送信によるうしろめたさがなくなり、クライアントは、添付ファイルを確認したうえ
で、納得して[送信]ボタンを押すことが可能となり、その上セキュリティーチェックもなくなる
はづです。

・宛先メールアドレス
・発信元メールアドレス
・件名
・本文
・添付ファイル

どなたかご存知の方がありましたらご教示下さい。

修正:設定内容の追記
修正:圧縮File FullPassの追加

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-14 23:11 ]

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-15 12:41 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-16 09:10
スレ主のOne.netです。Goo の「教えて」でdiashunさんからご指導いただき、正常
に動作していますので、ご提示いただいた内容を自己回答とさせていただき報告いた
します。Button_Clickのイベントハンドラに次のように記述しました。

コード:

Dim Ws, Sendcmd, oMsg '----------------------------- バリアント型として設定
Dim strTO As String = "To_address@address.or.jp"
Dim strSubject As String = "テストNewtest"
Dim strBody As String = "New1108これはテストテストテスト"
On Error Resume Next '---------------------------------- エラーで停止しない
Ws = CreateObject("WScript.Shell") '-------- COM オブジェクトへの参照を作成
oMsg = CreateObject("CDO.Message") '---------- CDO.Message オブジェクト生成
oMsg.To = strTO '------------------------------------------------- 宛先指定
oMsg.Subject = strSubject '------------------------------------- 件名を指定
oMsg.TextBody = strBody '--------------------------------------- 本文を指定
Sendcmd = "mailto:" & strTO & "?Subject=" & strSubject & "&body=" & strBody
Ws.Run(Sendcmd)



ただし、添付送信の指定方法がまだわかっていません。どなたか「メッセージの作成」
画面を開く場合の添付の設定方法についてご指導いただければ幸いです。

追加しました:ご提示いただいた内容を

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-16 22:48 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-18 15:08
スレ主のOne.netです。

最初の質問の通り、ClickOnceで十数箇所にテスト配布をしています。このアプリはデータファイル
を圧縮して毎月末にサーバまでメールに添付して送信してもらうための、SMTPサーバー名を設定し
た自動送信ボタンがあります。テストは問題なく動作していますが、クライアントから次のような
疑問や問題が投げかけられて困っていました。

1.クライアントから「SMTPサーバー名の設定は、なんとなくCPの中身を見れるパスワードを
設定させられている気がする」との意見があります。
2.「全自動のメールで送信は、添付ファイルの確認が出来ないため、何を送信させられている
か不安である。」との意見。
3.ウイルス対策ソフトのパーソナルファイアウォールに阻止されて送信できないPCが多くて
トラブルになる。

こんなことからGoo の「教えて」にも投稿し、ご教示を求めていましたら、「添付したメッセージ
の作成画面」をkorin_さんから回答いただきましたので、ここにも報告いたします。

コード:

'【注意】------- 「参照の追加」にで Microsoft MAPI Controlsを追加する
Try
Dim mapisettion As New MSMAPI.MAPISession
mapisettion.SignOn()
Dim mapimessages As New MSMAPI.MAPIMessages
With mapimessages
.SessionID = mapisettion.SessionID
.Compose()
.RecipType = 1
.RecipDisplayName = "宛先名前" '------------------ 宛先名前
.RecipAddress = "宛先アドレス" '-------------- 宛先アドレス
.MsgSubject = "件名" '-------------------------------- 件名
.MsgNoteText = "本文内容" '--------------------------- 本文
.AttachmentPathName = "添付ファイルフルパス" ' 添付ファイル
.Send(True) '------------------------------------- 手動送信
End With
mapisettion.SignOff()
MessageBox.Show("正常にメールを送信しました。", "送信終了")
Catch ex As Exception
MessageBox.Show("送信できませんでした。" & Chr(13) & Chr(10) & _
"MS Outlookの場合、キャンセルされるとエラーになります。", "エラー")
End Try



※ 「参照の追加」画面の[COM]タグに Microsoft MAPI Controlsがない場合
→1.下のサイトでVisual Basic 6.0 のランタイムのダウンロードして下さい。
http://www.vector.co.jp/soft/win95/util/se342080.html​
→2.Msmapi32.ocxをインストールして「参照の追加」画面の-[COM]タグに
Microsoft MAPI Controls 6.0 が表示せれます。これを追加ください。

そして、この方法は、添付ファイルの設定した「メッセージの作成」画面をプログラムで作成し、
正常に動作しています。
以上

修正:下から6行目の余白削除

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-18 23:16 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-18 15:39
マルチポスト先での結果をここに書いてくれるのはそれはそれでありがたいのですが、途中のやりとりも含めた情報もあったほうがなお良いと思います。
# 人によっては、そっちが必要な情報かもしれないので

というわけで、情報共有のためリンクしておきます。
http://ziddy.japan.zdnet.com/qa4481462.html
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-19 09:43
rainさん、すみません。
別の掲示板の内容をこのに掲載するのは少しどうかと思いましたが、いつもこの掲示板には
大変お世話になっていましたので、少しでもお役に立てばと考えました。これからは途中経
過も含めて掲載します。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-19 10:28
引用:

One.netさんの書き込み (2008-11-19 09:43) より:
rainさん、すみません。
別の掲示板の内容をこのに掲載するのは少しどうかと思いましたが、いつもこの掲示板には
大変お世話になっていましたので、少しでもお役に立てばと考えました。これからは途中経過も含めて掲載します。


誤解されると困ってしまいますが、私は別に責めているとかそういう考えでは書いていないです。
One.net さんの情報提供はありがたいと思っており、また、それを応援したいとも思っています。
でも、途中経過まで含めて書いていたら大変ですよね。それに、上にあるまとめを書いたのにも、結構時間がかかったんじゃないかなと思います。
リンク貼ったほうが楽ですよ?

あと1つだけ提案なのですが、質問を別の掲示板へ投げた時点で、互いのスレッドへの相互リンクを貼っておくと、なおよいのではないでしょうか。
今回は大丈夫でしたが、もしこのスレッドと向こうのスレッドで同時に回答がついたりしたら、いろいろと大変だと思いますので。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-20 01:15
rainさん、ありがとうございました。
マルチポストを責めているのではないことは理解していましたが、回答がないからといって
他の掲示板に同じ質問をするのは、やはりその掲示板に対しての信頼関係を疑われるよ
うな気がします。私は回答がいただけなかったので、今回始めてマルチポストしました
が、その掲示板に回答していただいている回答者にしてみればあまりいい気はしないと
思います。
それよりも高次元で知識を共有するべきと考え、あえて別の掲示板から得た情報を投稿
しましたが、rainさんの言われるようにマルチポストする時点で「互いのスレッドへの
相互リンクを貼っておく」というアイデァは、これから同じような状況になった場合に
は、双方が情報の供用を明示的に理解される方法と思いました。

ところで、今回のMSTPサーバ−名を使用しない「添付ファイル付メール送信」をテスト
していましたがMS_Outlookを使用のクライアントからエラーが出る報告があり、現在調
査中です。又結果を報告します。rainさん、ありがとうございました。

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-20 01:27 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-11-20 08:04
スレ主のOne.netです。
MS_Outlookについてエラーが出ると報告しましたが、その後の調査で
例外が発生しますが、宛先に正常に着信していることがわかりました。
Becky(http://ringonoki.net/tool/mail/becky.php)に関しては調べて
いません。以上追加報告しました。

【追加記載】
上記の通り一旦は MS_Outlookに対しても正常に動作すると報告しまし
たが、テスト方法に誤りがありましてMS_Outlookでの正常動作は確認
出来ていません。申し訳ありませんでした。

ただし、CDOによる添付ファイル付Mail送信方法でOutlook Express
にもMS_Outlookのも共通で正常に動作することが確認できましたので、
下に報告いたします。
コード:

Dim oMsg'--------------------------- バリアント型宣言
oMsg = CreateObject("CDO.Message") '-オブジェクト生成
oMsg.To = 宛先Add '---------------------- 宛先Address
oMsg.Subject = "Test " '------------------------ 件名
oMsg.TextBody = "テストメッセージです" '-------- 本文
oMsg.AddAttachment("C:\abc.txt") '------ 添付ファイル
oMsg.Send()
MessageBox.Show("正常にデータを送信しました。", "送信終了")



【追加記載】以降を追加しました。
[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-21 17:57 ]

【修正記載】2008/11/24
再三修正ですみません。21日のテストでは正常に動作できたと思っていましたが
MS_Outlookでは次のようなコードでないと動作しないことを今日になって確認しました。
コード:

Dim Ws, oMsg
Ws = CreateObject("Outlook.Application") 'アプリケーションオブジェクト
oMsg = Ws.CreateItem(0) '---------------------------メールオブジェクト
oMsg.To = fromAdd '------------------------------------- 宛先アドレス
oMsg.Subject = " お尋ねします。" '------------------------------- 件名
oMsg.Body = "サポートセンター殿" '------------------------------- 本文
oMsg.Attachments.Add("C:\・・・\abc.txt") '-------------- 添付ファイル
oMsg.Display() '------------(添付は設定有)---- 編集画面表示→[送信]


追加修正:【修正記載】以降追加しました

[ メッセージ編集済み 編集者: One.net 編集日時 2008-11-24 13:42 ]
1

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