package lightbox.june.mailpost;
import android.os.AsyncTask;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
/**
* Created by lightbox on 2016/06/06.
*/
public class AndroidSendmail {
// AsyncTask のインラインで参照する為の final
private final String server;
private final String port;
private final String userid;
private final String password;
private final String username;
// ************************************
// コンストラクタ
// ************************************
public AndroidSendmail(
String server,
String port,
String userid,
String password,
String username) {
this.server = server;
this.port = port;
this.userid = userid;
this.password = password;
this.username = username;
// Log.i("lightbox","コンストラクタ");
// Log.i("lightbox",server);
// Log.i("lightbox",port);
// Log.i("lightbox",userid);
}
// ************************************
// AsyncTask の onPostExecute から外部イベントとして
// 呼び出す為のインターフェイス
// ************************************
public interface SendMailed {
public void onMailResult(String result);
}
// ************************************
// メール送信
// ************************************
public void SendMail(String to, String from, String subject, String body,final SendMailed sm) {
new AsyncTask<String, Void, String>() {
// ************************************
// 非同期処理
// ************************************
@Override
protected String doInBackground(String... params) {
// Log.i("lightbox","開始");
String result_string = "";
try {
// ************************************
// プロパティオブジェクトを作成
// プロパティオブジェクトは、extends Hashtable(連想配列)
// ************************************
Properties props = new Properties();
// ************************************
// * 連想配列に送信用サーバのアドレスをセット
// ************************************
// props.put("mail.smtp.host","smtp.mail.yahoo.co.jp"); // Yahoo
// props.put("mail.smtp.host","smtp.live.com"); // Microsoft
props.put("mail.smtp.host", server);
props.put("mail.smtp.port", port);
props.put("mail.smtp.auth", "true" ); // SMTP 認証を行う
// ************************************
// SSL関連設定
// ************************************
if ( port.equals("465") ) {
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.socketFactory.port", port);
}
// ************************************
// 暗号化
// ************************************
if ( port.equals("587") ) {
props.put("mail.smtp.starttls.enable", "true");
}
// ************************************
// メール用のセッションを作成
// ************************************
SimpleAuthenticator sa =
new SimpleAuthenticator(userid, password);
Session MailSession =
Session.getInstance( props, sa );
// ************************************
// メール用のメッセージオブジェクトを作成
// ************************************
MimeMessage msg = new MimeMessage(MailSession);
// ************************************
// 宛先
// ( 第一引数では、CC や BCC を指定できます。)
// ( 第二引数は、配列も使えます / その場合は、setFrom に準じます )
// ************************************
msg.setRecipients(
Message.RecipientType.TO,
params[0]
);
// ************************************
// 送信者
// ************************************
msg.setFrom(
new InternetAddress( params[1], username, "ISO-2022-JP" )
);
// ************************************
// 件名
// ************************************
msg.setSubject(
MimeUtility.encodeText(
params[2],
"iso-2022-jp",
"B"
)
);
// ************************************
// 本文
// ************************************
msg.setContent(
params[3],
"text/plain; charset=\"iso-2022-jp\""
);
// ************************************
// 送信
// ************************************
Transport.send( msg );
result_string = "メールの送信を完了しました";
}
catch( Exception e ) {
e.printStackTrace();
result_string = "メールの送信に失敗しました";
}
// Log.i("lightbox","終了");
return result_string;
}
// ************************************
// 非同期処理終了後の処理( 画面へのアクセスが可能 )
// ************************************
@Override
protected void onPostExecute(String result) {
// 引数のインターフェイス内のメソッドを呼び出す
sm.onMailResult(result);
}
}.execute(to, from, subject, body);
}
// ************************************
// 認証用のプライベートクラス
// ************************************
private class SimpleAuthenticator extends Authenticator {
private String user_string = null;
private String pass_string = null;
public SimpleAuthenticator( String user_s, String pass_s ) {
super();
user_string = user_s;
pass_string = pass_s;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication( this.user_string, this.pass_string );
}
}
}