AppSeedのアプリ開発ブログ

アプリ開発会社AppSeed(アップシード)開発担当のブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsや備忘録、アプリ開発に役立つ情報を発信します。

【Android】アプリからgmailにテキストを自動送信させる方法(サーバーを使わない)

develop.hateblo.jp

先日、サーバーを使わないでアプリからgmailにテキストを自動する方法を紹介しました。
前回はiOS版だったので、今回はAndroid版です。


Androidの場合はjavamailというライブラリを使用します。
下記のサイトから

  • activation.jar
  • additionnal.jar
  • mail.jar

をダウンロードしてプロジェクトに組み込みます。
(ライブラリをプロジェクトに読み込む方法については割愛)

code.google.com


【Android】アプリからgmailにテキストを自動送信させる方法(サーバーを使わない)

ライブラリのインポートが終わったら、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アカウントにメッセージを送るようにしています。
最後に送信結果がトーストで表示されるようにしています。