DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

指定したURLをブラウザで開く、電子メールソフトを開く

指定したURLをブラウザで開く

Process.Startメソッドを使い、関連付けにより、簡単に指定したURLをブラウザで開くことができます。「通常使用するブラウザ」として設定されているブラウザが開きます。

VB.NET
コードを隠すコードを選択
'"http://dobon.net"を標準のブラウザで開いて表示する
System.Diagnostics.Process.Start("http://dobon.net")
C#
コードを隠すコードを選択
//"http://dobon.net"を標準のブラウザで開いて表示する
System.Diagnostics.Process.Start("http://dobon.net");

電子メールソフトを開く

また、関連付けにより、電子メールソフト(メーラー)を開くこともできます。

次の例では、"test@sample.com"を宛先にして、メーラーを開いています。

VB.NET
コードを隠すコードを選択
'"To"を"test@sample.com"として、標準のメールクライアントを開く
System.Diagnostics.Process.Start("mailto:test@sample.com")
C#
コードを隠すコードを選択
//"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"を指定しています。

VB.NET
コードを隠すコードを選択
System.Diagnostics.Process.Start("mailto:test1@sample.com,test2@sample.com")
C#
コードを隠すコードを選択
System.Diagnostics.Process.Start("mailto:test1@sample.com,test2@sample.com");

題名、本文、CC、BCCを指定する

宛先(to)以外のヘッダを指定することもできます。例えば、題名(subject)を「ご挨拶」としてメーラーを開くには、次のようにします。

VB.NET
コードを隠すコードを選択
System.Diagnostics.Process.Start("mailto:test@sample.com?subject=ご挨拶")
C#
コードを隠すコードを選択
System.Diagnostics.Process.Start("mailto:test@sample.com?subject=ご挨拶");

同じようにして、本文(body)、CC、BCCも指定することができます。以下に例を示します。

VB.NET
コードを隠すコードを選択
'宛先
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))
C#
コードを隠すコードを選択
//宛先
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クラスについては、こちらをご覧ください。

VB.NET
コードを隠すコードを選択
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))
C#
コードを隠すコードを選択
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="(ファイルのパス)"」を追加することにより、添付ファイルを指定できるようです。
  • 履歴:
  • 2006/11/30 「電子メールソフトを開く」でURLエンコードに関する記述を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • 「???を参照に追加します」の意味が分からないという方は、こちらをご覧ください。