先日、サーバーを使わないでアプリからgmailにテキストを自動する方法を紹介しました。
前回はiOS版だったので、今回はAndroid版です。
Androidの場合はjavamailというライブラリを使用します。
下記のサイトから
- activation.jar
- additionnal.jar
- mail.jar
をダウンロードしてプロジェクトに組み込みます。
(ライブラリをプロジェクトに読み込む方法については割愛)
ライブラリのインポートが終わったら、AndroidManifest.xmlに以下のパーミッションを追加します。
//AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
以下実装コード
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.EditText; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.select_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText ed = (EditText)findViewById(R.id.input_text); String tex = ed.getText().toString(); //EditTextで入力したテキストを文字列として取得する asyncTask a = new asyncTask(); a.execute((Object)tex,(Object)"gmailアカウント名",(Object)"gmailパスワード",new Object()) ; } }); } private class asyncTask extends android.os.AsyncTask{ protected String text; protected String account; protected String password; @Override protected Object doInBackground(Object... obj){ text=(String)obj[0]; account=(String)obj[1]; password=(String)obj[2]; java.util.Properties properties = new java.util.Properties(); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.port", "465"); properties.put("mail.smtp.socketFactory.post", "465"); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); final javax.mail.Message msg = new javax.mail.internet.MimeMessage(javax.mail.Session.getDefaultInstance(properties, new javax.mail.Authenticator(){ @Override protected javax.mail.PasswordAuthentication getPasswordAuthentication() { return new javax.mail.PasswordAuthentication(account,password); } })); try { msg.setFrom(new javax.mail.internet.InternetAddress(account + "@gmail.com")); //自分自身にメールを送信 msg.setRecipients(javax.mail.Message.RecipientType.TO, javax.mail.internet.InternetAddress.parse(account + "@gmail.com")); msg.setSubject("メールタイトル"); msg.setText(text); javax.mail.Transport.send(msg); } catch (Exception e) { return (Object)e.toString(); } return (Object)"OK"; } @Override protected void onPostExecute(Object obj) { //画面にメッセージを表示する android.content.Context context = getApplicationContext(); android.widget.Toast t=android.widget.Toast.makeText(context,(String)obj, android.widget.Toast.LENGTH_LONG); t.show(); } } }
上記の例だと、画面上のボタンを押したタイミングで、EditTextに入力されたテキストを取得してgmailアカウントにメッセージを送るようにしています。
最後に送信結果がトーストで表示されるようにしています。