忍者ブログ

書かないと忘れてしまうから

仕事上必要な工夫など、備忘録として残します。

[PR]

2024-05-03
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Excel等からCDOを利用しメールクライアントを介さずにメールする(2)

2012-11-04
「Excel等からCDOを利用しメールクライアントを介さずにメールする」で紹介したCDOをExcelに実装しました。

CDOtest(xls)
マクロを有効にしないと使用出来ません。
マクロはパスワードをかけていないので自由に改造して使用して下さい。

GoMail関数改


Sub GoMail(t As Variant, sj As Variant, bd As Variant, Optional at As Variant)

Set objMail = CreateObject("CDO.Message")

Worksheets("setting").Select
With Sheets("setting")

    objMail.to = t '送信先アドレス
    objMail.Subject = sj 'メール題名
    objMail.TextBody = bd  '本文
    If at <> "" Then objMail.AddAttachment at '添付ファイル

    objMail.From = .Range("B1")
    chars = .Range("B2")
    If chars = "" Then chars = "utf-8"
    objMail.BodyPart.Charset = chars
    objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = .Range("B3")
    objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = .Range("B4")
    objMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = .Range("B5")
    objMail.Configuration.Fields.Update
End With

objMail.Send

Set objMail = Nothing
End Sub
このコードは標準モジュールに記載してあります。


発信者メールアドレス、エンコード、送信方法(2=SMTP)、SMTPサーバー、ポート番号
は setting というシートから読み取りますから適切に設定して下さい。
送信先メールアドレス、メール件名、メール本文、添付ファイルのフルパス名は呼び出し側から引数で与えます。

呼び出し側



送信先メールアドレス、メール件名、メール本文、添付ファイルのフルパス名を入力して下さい。
「メール送信」ボタンをクリックしたら実行されます。
PR

Excel等からCDOを利用しメールクライアントを介さずにメールする

2012-11-04
 メールクライアントを通さずにメールを送りたいということはありませんか。
 CDOを使うと、DLLやメールクライアントソフトを介さずにメール送信できます。これを使って、Excelからメールする方法をさぐりました。
 汎用化するために、メール送信部と呼び出し側に分けます。

呼び出し側

コマンドボタンをシートに作成して下さい。
そのコマンドボタンをクリックしたら実行されるVBAを組みます。
GoMail(送信者メアド,宛先メアド, 件名, 本文,添付ファイル,エンコード) で呼び出すことになります。
CDOは実行時バインディングしており参照設定はしていません。

■呼び出し側VBA
Private Sub CommandButton1_Click()

 fad="abc@gmail.com" ' 発信者アドレス
 tad="xyz@gmail.com" '送信先アドレス
 mbody="Hello" 'メール本文
 sbj="Mail Test" 'メール題名

 '添付ファイルを指定してUTF-8形式で送信
 Call Gomail(fad,tad,sbj,mbody,"c:a.csv","UTF-8")

End Sub

メール送信コア部分



 多少の汎用性を確保するため、VBAのエディタ画面にてプロジェクトに標準モジュールを挿入し、そこに下記のように記載します。
■メール送信コア部分
Sub GoMail(fm As Variant, t As Variant, sj As Variant, bd As Variant, Optional at As Variant, Optional chars As Variant)
 Set objMail = CreateObject("CDO.Message")

 objMail.From = fm ' 発信者アドレス
 objMail.To = t '送信先アドレス
 objMail.Subject = sj 'メール題名
 objMail.TextBody = bd '本文

 If at <> "" Then objMail.AddAttachment at '添付ファイル
 If chars = "" Then chars = "utf-8" 'エンコード
 objMail.BodyPart.Charset = chars

 strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"

 With objMail.Configuration.Fields
   .Item(strConfigurationField & "sendusing") = 2 '送信方法=SMTP使用
   .Item(strConfigurationField & "smtpserver") = "xxx.xxx..xxx.xxx"'SMTPのIPアドレス
   .Item(strConfigurationField & "smtpserverport") = 25
   .Update
 End With

 objMail.Send
 Set objMail = Nothing

End Sub

~= 2の部分はSMTPにより送信するという宣言だと考えます。
smtpserver=は、メール送信に使用するサーバーのホスト名、もしくはIPアドレスを指定 smtpserverport=はデフォルトの25番ポートか、サーバー指定のポート。
海外のアプリを使用する機会が多いのでエンコードはUTF-8をデフォルトにしてみました。JISならば"iso-2022-jp"です。

Gmailの場合にはWith~End With にさらに下記設定も追加してみます。
  .Item(strConfigurationField & "smtpusessl") = True
   .Item(strConfigurationField & "smtpauthenticate") = 1
   .Item(strConfigurationField & "sendusername") = "xxxxx@gmail.com"
   .Item(strConfigurationField & "sendpassword") = "password"
   .Item(strConfigurationField & "smtpconnectiontimeout") = 60

serialtyさんのページを参照しました

■VBAで利用する方法
Call GoMail(発信者メールアドレス,宛先メールアドレス,メール件名,本文[,添付ファイル,エンコード])
で呼び出します。
添付ファイルの指定がなければ当たり前ですが添付しません。
エンコードの指定がなければデフオルトはUTF-8にしてあります。
※KingSoftSpreadsheets2010 VBA版でも動作しました。

プロフィール

HN:
otsukare30
性別:
男性
自己紹介:
mail:otsukare30★gmail.com

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

ブログ内検索

忍者カウンター

P R