FC2ブログ

更新履歴Blog

日記

Gmailアカウントでメール送信をする

AndroidアプリでGMailアカウントを使ってメール送信をするやり方

  1. GMailのアカウントを持っていない場合は、GoogleのサイトからGMailのアカウントを取得する。

  2. マニフェスト(AndroidManifest.xml)にインターネット接続を許可するパーミッションを追加する
        <uses-permission android:name="android.permission.INTERNET">
    

  3. 以下3つのjarをJavaMail-Androidのサイトからダウンロードして入手する
    ・activation.jar
    ・additionnal.jar
    ・mail.jar

  4. ダウンロードした「activation.jar」「additionnal.jar」「mail.jar」をプロジェクトのlibsフォルダに配置する
    201604121439.png
    Windowsはエクスプローラで、MacならFinderで直接コピーでOK

  5. build.gladleを編集して「activation.jar」「additionnal.jar」「mail.jar」を読み込む
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.2.0'
        compile 'com.android.support:design:23.2.0'
        compile files('libs/activation.jar')
        compile files('libs/additionnal.jar')
        compile files('libs/mail.jar')
    }
    

  6. メール送信のコードをかく

以下、ソースコード
Android.manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

</manifest>
MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SendMailAsyncTask task = new SendMailAsyncTask();
        task.execute();
    }
}
SendMailAsyncTask
package com.example.app;

import android.os.AsyncTask;
import android.util.Log;

import java.util.Date;
import java.util.Properties;

import javax.mail.AuthenticationFailedException;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMailAsyncTask extends AsyncTask {

    private String gmailAddress = "exsample@gmail.com";    //  取得したGMailのアドレス
    private String gmailPassword = "password";    //  取得したGMailのアカウント
    private String encodeType = "UTF-8";

    @Override
    protected Integer doInBackground( String... paramas )
    {
        String subject = "メールタイトル";
        String message = "メール本文";

        //  SSL
        Properties props = new Properties();
//      props.put("mail.debug", "true");
//      props.put("mail.debug.auth", "true");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "465");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.quitwait", "false");
        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
        props.put("mail.smtp.connectiontimeout", 30000);
        props.put("mail.smtp.timeout", 30000);


        try {
            Session session = Session.getInstance(props, new Authenticator() {

                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication( gmailAddress, gmailPassword );
                }
            });
//          session.setDebug(true);


            MimeMessage msg = new MimeMessage( session );
            msg.setHeader("Content-Type", "text/html");
            msg.setSentDate(new Date());
            msg.setSubject(subject, encodeType);
            msg.setFrom(new InternetAddress(gmailAddress, "差出人氏名", encodeType));

            //  送信先アドレスの配列
            String[] toMailAddress = {
                    "xxxxxx@gmail.com",
            };

            InternetAddress[] addresses = new InternetAddress[toMailAddress.length];
            for( int i=0;i<toMailAddress.length;i++ )
                addresses[i] = new InternetAddress( toMailAddress[i]);
            msg.setRecipients(Message.RecipientType.TO, addresses);
            msg.setText(message, encodeType, "plain");

            Transport.send( msg );
        }
        catch ( AuthenticationFailedException ex )
        {

        }
        catch( MessagingException ex )
        {

        }
        catch ( Exception ex )
        {

        }

        return 0;
    }
}

スポンサーサイト




コメント

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://v2rt.blog81.fc2.com/tb.php/15-cc0613eb
この記事にトラックバックする(FC2ブログユーザー)