Process.Startメソッドを使い、関連付けにより、簡単に指定したURLをブラウザで開くことができます。「通常使用するブラウザ」として設定されているブラウザが開きます。
'"https://dobon.net"を標準のブラウザで開いて表示する
System.Diagnostics.Process.Start("https://dobon.net")
//"https://dobon.net"を標準のブラウザで開いて表示する
System.Diagnostics.Process.Start("https://dobon.net");
また、関連付けにより、電子メールソフト(メーラー)を開くこともできます。
次の例では、"test@sample.com"を宛先にして、メーラーを開いています。
'"To"を"test@sample.com"として、標準のメールクライアントを開く
System.Diagnostics.Process.Start("mailto:test@sample.com")
//"To"を"test@sample.com"として、標準のメールクライアントを開く
System.Diagnostics.Process.Start("mailto:test@sample.com");
補足:"mailto:test@sample.com"は"mailto:?to=test@sample.com"としても同じです。
RFC2368によれば、複数のメールアドレスは、コンマで区切ることにより指定できます。ただし、メーラーによっては、コンマを区切り文字として認識しないものもあるようです。
次の例では、宛先に"test1@sample.com"と"test2@sample.com"を指定しています。
System.Diagnostics.Process.Start("mailto:test1@sample.com,test2@sample.com")
System.Diagnostics.Process.Start("mailto:test1@sample.com,test2@sample.com");
宛先(to)以外のヘッダを指定することもできます。例えば、題名(subject)を「ご挨拶」としてメーラーを開くには、次のようにします。
System.Diagnostics.Process.Start("mailto:test@sample.com?subject=ご挨拶")
System.Diagnostics.Process.Start("mailto:test@sample.com?subject=ご挨拶");
同じようにして、本文(body)、CC、BCCも指定することができます。以下に例を示します。
'宛先 Dim [to] As String = "test@sample.com" '題名 Dim subject As String = "ご挨拶" '本文 Dim body As String = "こんにちは。はじめまして。" 'CC Dim cc As String = "cc@sample.com" 'BCC Dim bcc As String = "bcc@sample.com" '標準のメールクライアントを開く System.Diagnostics.Process.Start( _ String.Format("mailto:{0}?subject={1}&body={2}&cc={3}&bcc={4}", _ [to], subject, body, cc, bcc))
//宛先 string to = "test@sample.com"; //題名 string subject = "ご挨拶"; //本文 string body = "こんにちは。はじめまして。"; //CC string cc = "cc@sample.com"; //BCC string bcc = "bcc@sample.com"; //標準のメールクライアントを開く System.Diagnostics.Process.Start( string.Format("mailto:{0}?subject={1}&body={2}&cc={3}&bcc={4}", to, subject, body, cc, bcc));
補足:上記で紹介した以外のヘッダも指定できるメーラーもあります。逆に、上記で紹介したヘッダを指定できないメーラもあります。
上記のコードでは、題名と本文に日本語が含まれています。上記ようなものであれば通常問題ありませんが、題名や本文に「&」や「=」や改行文字などが含まれていれば正しく解釈されません。RFC2368によれば、エンコードが必要ということですので、本当ならば、日本語が含まれる場合でもURLエンコードすべきでしょう。
上記の例を修正して、URLエンコードを行う例を以下に示します。HttpUtilityメソッドを使っているため、System.Web.dllを参照設定に追加する必要があります。なお、エンコード方法を指定しているEncodingクラスについては、こちらをご覧ください。
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift_jis") '宛先 Dim [to] As String = "test@sample.com" '題名 Dim subject As String = "ご挨拶" subject = System.Web.HttpUtility.UrlEncode(subject, enc) '本文 Dim body As String = "こんにちは。" + vbCrLf + "はじめまして。" body = System.Web.HttpUtility.UrlEncode(body, enc) 'CC Dim cc As String = "cc@sample.com" 'BCC Dim bcc As String = "bcc@sample.com" '標準のメールクライアントを開く System.Diagnostics.Process.Start( _ String.Format("mailto:{0}?subject={1}&body={2}&cc={3}&bcc={4}", _ [to], subject, body, cc, bcc))
System.Text.Encoding enc = System.Text.Encoding.GetEncoding("shift_jis"); //宛先 string to = "test@sample.com"; //題名 string subject = "ご挨拶"; subject = System.Web.HttpUtility.UrlEncode(subject, enc); //本文 string body = "こんにちは。\r\nはじめまして。"; body = System.Web.HttpUtility.UrlEncode(body, enc); //CC string cc = "cc@sample.com"; //BCC string bcc = "bcc@sample.com"; //標準のメールクライアントを開く System.Diagnostics.Process.Start( string.Format("mailto:{0}?subject={1}&body={2}&cc={3}&bcc={4}", to, subject, body, cc, bcc));
この例では、シフトJISでURLエンコードをしていますが、そのような決まりはありません。むしろ、UTF-8でエンコードするほうが推奨されているようです。しかし、ほとんどのメーラーでシフトJISしか使えず、UTF-8では文字化けします。ところが逆に、Mozilla Thunderbirdでは、シフトJISで文字化けし、UTF-8では正しく認識されるようです(バージョン1.5で確認)。
このような状況を考えると、むやみにURLエンコードするのは逆に危険と言えます。どうしてもURLエンコードが必要な改行や、「&」や「=」や「?」などだけをエンコードしたほうがよさそうです。具体的には、URLエンコードすることなく、改行文字は「%0D%0A」、「&」は「%26」、「=」は「%3D」、「?」は「%3F」、「,」は「%2C」、「%」は「%25」に文字列置換します。
補足:「mailto」を使ってメーラーを起動させるときに添付ファイルを指定することは、通常できません。ただし、一部のメーラー(nPOPなど)は「attach="(ファイルのパス)"」を追加することにより、添付ファイルを指定できるようです。