SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Android Eメール送信

【 Xamarin 記事一覧 】

1 暗黙的インテント

(1) テキストのみ


アクションにACTION_SENDを指定して暗黙的インテントを呼び出すことで、インストールされているアプリで対応可能なものが列挙されます。
ここでは、メールソフトを選択すると、宛先・件名・本文等がセットされた状態となり、後は送信ボタンを押すだけという事になります。
(宛先・本文・件名などがセットされるかどうかは、起動されたアプリの仕様に依存します)

なお、今回確かめて見た中では、SetType("text/plain")を省略すると例外となりました。

var intent = new Intent();
intent.SetAction(Intent.ActionSend);
intent.SetType("text/plain");
intent.PutExtra(Intent.ExtraEmail, new String[] { "user1@example.com" });
intent.PutExtra(Intent.ExtraCc, new String[] { "user2@example.com" });
intent.PutExtra(Intent.ExtraBcc, new String[] { "user3@example.com" });
intent.PutExtra(Intent.ExtraSubject, "件名");
intent.PutExtra(Intent.ExtraText,"本文");
StartActivity(intent);

(2) 添付ファイル


添付ファイルは、SetTypeとExtraStreamで指定します。図は、送信時に添付がセットされている時と、同メールが受信された時のものです。
添付ファイルは、ローカルのfilesにあらかじめ用意しました。この辺のファイルの扱いについては、
「Xamarin.Android ファイルの保存」を参照して下さい。

var intent = new Intent();
intent.SetAction(Intent.ActionSend);

intent.PutExtra(Intent.ExtraEmail, new String[] { "spw0044@gmail.com" });
intent.PutExtra(Intent.ExtraSubject, "件名");
intent.PutExtra(Intent.ExtraText,"本文");

// 画像を添付
intent.SetType("image/jpeg");
//  path= /data/data/パッケージ名/files
var path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
intent.PutExtra(Intent.ExtraStream, Android.Net.Uri.Parse("file://" + path + "/xamarin.jpg"));

StartActivity(intent);



2 SmtpSclientによる直接通信

別のアプリに頼らずに自前で送信してしまうとなると、SmtpClientなどを利用することになると思いますが、こうなると、別にAndroidプログラムではなく、普通のC#アプリですw

ただ、SmtpClientの使用例では、よく省略されていますが、ServerCertificateValidationCallbackのコールバックでtrueを返すように処理しないとAndroidでは例外となってしまっていたので注意が必要かもしれません。

var mail = new MailMessage();
mail.From = new MailAddress("spw0044@gmail.com");
mail.To.Add("user2@example.com");
mail.Subject = "件名";
mail.Body = "本文";

var smtpClient = new SmtpClient("smtp.gmail.com",587);
smtpClient.Credentials = new NetworkCredential("spw0044@gmail.com", "XXXXXXXXXX");
smtpClient.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
smtpClient.Send(mail);

【 Xamarin 記事一覧 】