Xamarin.Android Eメール送信
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);