はじめに
仕事でDBのデータからグラフを作ってそれをインライン画像で毎日メール送信するプログラムをコンソールで作ったので、知見として記す
環境
- OS:WIndows10
- 開発環境:Visual Studio 2010(.Net Framework 4.0)
コードと解説
'.NETでメールを使うときに必要なライブラリ Imports System.Net.Mail Imports System.Net.Mime Imports System.IO 'メールオブジェクト作成 dim mailmsg = new MailMessage() 'メール本文を格納する変数 'インライン画像はHTMLメール専用なので、本文はHTML形式で作る dim mailtext as string '************************************************************** 'メールオブジェクトの送信に必要な各種プロパティは省略 'メールの本文を入れていく '************************************************************** '複数添付する場合は都度実施のこと 'メール本文のimgタグのsrcに必要な一意のIDを生成する dim key as string = Guid.NewGuid.ToString 'メール本文に添付する画像のimgタグを追加 mailtext += mailtext + "<img src=""cid:" & key & """/>" 'memorystreamに画像を一旦入れる dim imgms = new MemoryStream '************************************************************** '画像をimgmsに読み込む。ファイルからでもbyte列からでも可能 'やり方はここでは省略 'imgmsに画像データを入れたとする '************************************************************** 'HTMLメールオブジェクト作成(正確には違うけど) dim htmlView As AlternateView 'HTMLメールを生成する(これ以降メール本文を追加・変更することはできない) htmlView = AlternateView.CreateAlternateViewFromString(mailtext, Nothing, MediaTypeNames.Text.Html) '複数画像を追加する場合はここから[loop end]まで各画像に対してループさせる 'Thunderbirdだと画像非表示になる対策で一度バイナリ化してMemoryStreamに格納 Dim byteimg As Byte() byteimg = imgms.ToArray Dim ms As New MemoryStream(byteimg) 'HTMLメールの画像タグに対応する画像本体を格納するリンクリソースを作成 '画像形式は都度変更してください Dim res As New LinkedResource(ms, System.Net.Mime.MediaTypeNames.Image.Jpeg) '画像タグの追加で使用した一意のIDを付与 res.ContentId = key 'HTMLメールオブジェクトに先程のリンクリソースを追加 htmlView.LinkedResources.Add(res) '[loop end] 'メールオブジェクトにHTMLメールオブジェクトを追加する mailmsg.AlternateViews.Add(htmlView) '以後、送信処理 '調べれば出るのでここでは省略
- メールオブジェクト作成
- 各プロパティにメールのデータを入れる
- 本文を作成するクラスなり関数なりで画像タグを平文で挿入する
- メール本文はHTML形式で作成のこと。
- HTMLメールオブジェクトを作成して、そこに画像を追加する
- メールオブジェクトに先程のHTMLメールオブジェクトを追加する
- 送信
- 空メールを送信するプログラムを作成
- HTMLメールを送信するプログラムに拡張
- 今回の画像を添付するプログラムに拡張
0 件のコメント :
コメントを投稿