2017年4月6日星期四

Send an email in background in android

1. add jar lib
 https://code.google.com/archive/p/javamail-android/downloads

2. AndroidStudioでlib用のjarファイルを追加する方法
   (1)AndroidViewだったらprojectViewに変更
  (2)プロジェクト直下にlibsディレクトリを作成し、jarをいれる
(3)jarを右クリックし、「Add as Library」を選択後、対象プロジェクトを選択しOK

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

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


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


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

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);
    }

没有评论:

发表评论