こちらの記事[Android] Gmailアカウントでメールを送信するを見てやりました。めっちゃわかりやすかったです。ただ、これだけではできなかったので、初めてでやり方が分からなかったインポートの部分と、記事のままやってもエラーが出た部分だけ少し追記しました。
###1. javamail-androidからadditional.jar
とmail.jar
とactivation.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);
}