LoginSignup
28
28

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-07-20

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

1. javamail-androidからadditional.jarmail.jaractivation.jarをダウンロードする。

2. ダウンロードした3つのライブラリをインポートする

*Android Studioでインポートの方法がわからなければ
androidstudioにライブラリ用のjarファイルを追加する方法

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

AndroidManifest.xml
//この1行を追加
<uses-permission android:name="android.permission.INTERNET" />

つまりこんな感じ

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shun.mailsample" >
    //この1行を追加
    <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)に以下を実装

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にこれも書いとかないとエラーが出る

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
28