- 締切済み
VBAでメール送信(CDO)
お世話になります ExcelのVBAでCDOを使用してメールの送信を行おうとしております Excelファイルを配り、Excel内のアンケートに答えていただいた 後にVBAで作成したメール送信ボタンを実行すると、指定先にメール を送るということを考えております ただ、ソース内でSMTP情報と相手のメールアドレスの設定をしないと いけないのですが、この2点をどのようにVBAを使用して設定すれば良いの かが分かりません。そもそも出来るのかもわからないのですが ご存知の方可能なのであれば取得方法をご教授頂きたいと思います
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #2と#3の回答者です。 #4さんのご指摘のコードは、Mapiを使うわけですから、Mapiを使うなら、はじめからMapiをオートメーションにすればよいと思います。そうしたら、サンプルコードも多く出ていますし、Basp21ライブラリの利用も捨てがたいものがあります。そもそも、なぜ、CDOを使うのかなって思います。 もしかしたら、SMTPにこだわるのは、何かの誤解があるようにも思いますが、規定のWindowsのSMTPサービスを利用しないで、外部サーバーを使って送信することですか?もし、そうなら可能ですし、もちろん、メール・アドレスを取得することも、それなりの技術が必要ですが可能です。しかし、あまりVBAなどのプログラミングに詳しくない方に、手取り足取りというわけには行きません。 「cdo 外部smtpサーバー」でググってみれば、ある程度の情報は得られるはずです。
- cistronezk
- ベストアンサー率38% (120/309)
回答4においては、使用者に無断で情報をどこにでも送ることが可能なマクロはセキュリティ上問題が多いことを指摘しました。そして代案として、あて先と件名を設定したメーラを立ち上げる方法を示しました。 方法としては、hyperlink関数を使い方法と「start mailto」コマンドを使う方法があります。 ■hyperlink関数の方法 =HYPERLINK("mailto:<あて先メールアドレス>?subject=<件名>") ■「start mailto」コマンドの方法 以下を参照してください。 http://msdn.microsoft.com/ja-jp/library/cc440860.aspx VBAでは、 Shell "cmd.exe /c start mailto:Test@xxx.co.jp?subject=メーラーの起動&body=" & strBody, vbNormalFocus となります。
お礼
こんばんは アドバイスありがとうございます >どんなメーラを使っているかは人(あるいは会社)それぞれでしょう。 現実的には難しいと思います そうですね。必ずしも皆が決まったメーラーとも限りませんし、 中々難しいかもしれませんね それに上記でも書きましたがコンプライアンスの問題も考えなくては いけなそうですので、色々慎重に調査してます
- cistronezk
- ベストアンサー率38% (120/309)
>回答番号:No.2の補足に記述した内容が出来ないかと思いましたが出来るものなのでしょうか? SMTPサーバの情報はメーラからしか取れないと思いますが、どんなメーラを使っているかは人(あるいは会社)それぞれでしょう。 現実的には難しいと思います。どこかのフリーメールを使う方法もありますが、セキュリティ上ブロックしている会社もあるでしょう。そもそも相手の情報を無断でどこへでもメール送信できるようなマクロはセキュリティ上問題があると思います。 Excelからあて先や件名を設定したメーラを立ち上げたいのでしたら、以下のような方法もあります。 http://msdn.microsoft.com/ja-jp/library/cc440860.aspx VBAでは、 Shell "cmd.exe /c start mailto:Test@xxx.co.jp?subject=メーラーの起動&body=" & strBody, vbNormalFocus となるでしょう。このようにする方がセキュリティ上の問題を気にする必要もなく簡単でよろしいかと思います。
お礼
こんばんは アドバイスありがとうございます >どんなメーラを使っているかは人(あるいは会社)それぞれでしょう。 現実的には難しいと思います そうですね。必ずしも皆が決まったメーラーとも限りませんし、 中々難しいかもしれませんね それに上記でも書きましたがコンプライアンスの問題も考えなくては いけなそうですので、色々慎重に調査してます
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >> '----- SMTPサーバーを設定------- >この部分をVBAで(自動で取得+使用している相手のメールアドレス) >取得できないものかと思ったのですが 誤解していませんか?自分のSMTPで、固定したものです。相手のSMTPを使ったら、それは、メール偽装を意味します。それは禁じられた送信方法です。そのために、大手のプロバイダのメール・サーバーには、POP before SMTPがあります。メールアドレスは、ご自身で用意してください。それは、受信スタイルから始まりますから、CDOの範疇ではありません。
お礼
おはようございます >相手のSMTPを使ったら、それは、メール偽装を意味します。それは禁じられた送信方法です そうでしたか、知らなかったとはいえ恥ずかしい限りです アドバイスありがとうございました。 また何かございましたら宜しくお願い致します
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 CDOは、インストールしてありますか?スタンドアロンでは、CDOとしていませんので、インストールしていないことが多いです。 あるサイトで、CDOを勧めていましたが、あくまでも、Basp21 の代わりだと思いました。会社で使うと、Basp21の使用は、商用になるので有償になります。簡単な方法では、Mapi ですが、セキュリティが働いてしまうので、完全な自動ということにはなりません。マクロで組んでも、そのまま送信するということができません。ただ、個人的には、Mapiは皮肉にも安心して送信できます。CDOは、そのままストレートで流れていきます。 >ソース内でSMTP情報と相手のメールアドレスの設定をしないといけないのですが、 '----- SMTPサーバーを設定------- .Item(cdoSMTPServer) = "smtp.xxx.ttt" .Item(cdoSMTPServerPort) = 25 .Item(cdoSMTPAuthenticate) = cdoAnonymous '入れないとエラーが発生 .Item(cdoLanguageCode) = cdoShift_JIS http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/nov04/hey1129.mspx http://www.microsoft.com/technet/scriptcenter/guide/sas_ent_wbpa.mspx?mfr=true 上記は、WSH ですから、VBAの場合は、参照設定したほうがよいです。 コードは、。あまり参考にはなりませんが、システムの自動検索でプライベート・メールアドレスと混同されかねませんので、画像(半分)にしておきます
補足
こんばんは 回答ありがとうございます 非常に助かりました。参考にさせて頂いたソースをみて思ったのですが '----- SMTPサーバーを設定------- .Item(cdoSMTPServer) = "smtp.xxx.ttt" の部分ですが、数人にExcelファイルを配布する予定ですので この部分をVBAで(自動で取得+使用している相手のメールアドレス) 取得できないものかと思ったのですが ソース上で取得なんて出来ないものでしょうか?
- cistronezk
- ベストアンサー率38% (120/309)
とりあえず以下のことはご存知というとでしょうか。 http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/nov04/hey1129.mspx http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html
補足
回答ありがとうございます URL見て思ったのが 回答番号:No.2の補足に記述した内容が出来ないかと思いましたが 出来るものなのでしょうか?
お礼
こんばんは アドバイスありがとうございます 調査して、なんとか頑張ってみようと思います ただ、皆様のアドバイスの中でコンプライアンに引っ掛かるような 可能性がありそうな感じもしますので慎重にいきたいと思います