Android　ゼロからJavamailを使ってメールを送る方法

こちらの記事[[Android] Gmailアカウントでメールを送信する](http://qiita.com/zuccyi/items/9757ad0308d784a09c35)を見てやりました。めっちゃわかりやすかったです。ただ、これだけではできなかったので、初めてでやり方が分からなかったインポートの部分と、記事のままやってもエラーが出た部分だけ少し追記しました。


###1. [javamail-android](https://code.google.com/p/javamail-android/downloads/list)から```additional.jar```と```mail.jar```と```activation.jar```をダウンロードする。 
 
###2. ダウンロードした３つのライブラリをインポートする
*Android Studioでインポートの方法がわからなければ
[androidstudioにライブラリ用のjarファイルを追加する方法](http://tiro105.hateblo.jp/entry/2015/03/02/141526)



###3. AndroidManifest.xmlでインターネットを許可する

```xml:AndroidManifest.xml
//この１行を追加
<uses-permission android:name="android.permission.INTERNET" />
```
つまりこんな感じ

```xml:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shun.mailsample" >
    //この１行を追加
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>
```

 

###4. MainActivityにボタンを1個置いて、OnClickで指定したメソッド(例えばsendMail)に以下を実装

```java:MainActivity.java
public void sendMail(View view) {
        String email = "ほにゃらら@gmail.com";
        String password = "上記アカウントのパスワード";
        String body = "これがメールの本文になります";
        String subject = "これがメールの件名になります";

        try {
            //email と password更新
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
            sp.edit().putString("email", email).commit();
            sp.edit().putString("password", password).commit();

            //以下メール送信
            final Properties property = new Properties();
            property.put("mail.smtp.host",                "smtp.gmail.com");
            property.put("mail.host",                     "smtp.gmail.com");
            property.put("mail.smtp.port",                "465");
            property.put("mail.smtp.socketFactory.port",  "465");
            property.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

            // セッション
            final Session session = Session.getInstance(property, new javax.mail.Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(email, password);
                }
            });

            MimeMessage mimeMsg = new MimeMessage(session);

            mimeMsg.setSubject(subject, "utf-8");
            mimeMsg.setFrom(new InternetAddress(email));
            mimeMsg.setRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(email));

            /* 添付ファイルをする場合はこれを使う
            final MimeBodyPart txtPart = new MimeBodyPart();
            txtPart.setText(body, "utf-8");

            final MimeBodyPart filePart = new MimeBodyPart();
            File file = new File("[添付ファイルパス]");
            FileDataSource fds = new FileDataSource(file);
            DataHandler data = new DataHandler(fds);
            filePart.setDataHandler(data);
            filePart.setFileName(MimeUtility.encodeWord("[メール本文の添付ファイル名]")); */
            

            final Multipart mp = new MimeMultipart();
            mp.addBodyPart(txtPart);
            //mp.addBodyPart(filePart); //添付ファイルをする場合はこれ
            mimeMsg.setContent(mp);

            // メール送信する。
            final Transport transport = session.getTransport("smtp");
            transport.connect(email,password);
            transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
            transport.close();

        } catch (MessagingException e) {
            System.out.println("exception = " + e);

        } /*catch (UnsupportedEncodingException e) {
			必要あるのか不明
        }*/ finally {
        	System.out.println("finish sending email");
        }
    }
```
    

###5. 補足：MainActivityのOnCreateにこれも書いとかないとエラーが出る

```java:MainActivity.java
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //以下の２行が必要
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
```