ssCAROのブログ

色んなとこで見つけたプログラムのメモ置き場っぽい

メール送信(絵文字入り)のサンプル

Androidからメールを送るためには以下のサイトからファイルを3つダウンロードしてきます。
http://code.google.com/p/javamail-android/downloads/list

  • additionnal.jar
  • mail.jar
  • activation.jar

パッケージのフォルダの下に、libsフォルダを作ってコピーします。

eclipseで、[プロジェクト]-[プロパティ]を開いて[Java のビルド・パス]を選択します。
[ライブラリー]タブの[Jar 追加]で先ほどコピーしたjarファイルを追加します。

テストした構成
端末は「Xperia acro IS11S」
@ezweb.ne.jpを@auone.jpに転送してます。
@auone.jpの設定で@ezweb.ne.jpに"なりすまし"してます。

AndroidManifest.xml に以下を追加する

<uses-permission android:name="android.permission.INTERNET" />
package com.example.android.MailDemo;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Button;
import android.widget.EditText;


public class MailDemoActivity extends Activity {
    private Button button;
    private TextView textView;
    private EditText editText;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button = (Button)findViewById(R.id.Button1);
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Button1_onClick();
            }
        });
        
        textView = (TextView)findViewById(R.id.TextView1);
        
        // 絵文字を入力できる
        editText = (EditText)findViewById(R.id.EditText1);
        Bundle bundle = editText.getInputExtras(true);
        if (bundle != null) {
            bundle.putBoolean("allowEmoji", true);
        } 
    }
    
    public void Button1_onClick() {
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.host", "smtp.gmail.com");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.starttls.enable", "true");
        
        try {
            final MimeMessage mimeMsg = new MimeMessage(Session.getDefaultInstance(props, new Authenticator() {
                @Override
                // 認証データ。アカウント名とパスワードを指定して下さい。
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("*****@auone.jp", "*****");
                }
            }));
            
            char base = 0xE481;
            String emoji = new String(new char[] {base});
            
            // FROM/TOなど。setTextのあとに一般的(?)なエンコードにしています。
            mimeMsg.setFrom(new InternetAddress("*****@ezweb.ne.jp"));
            mimeMsg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse("*****@ezweb.ne.jp"));
            mimeMsg.setSubject("送信テスト" + emoji, "MS932");
            mimeMsg.setText("テストメールです。" + emoji, "MS932");
            mimeMsg.setHeader("Content-Type", "text/plain; charset=iso-2022-jp");
            mimeMsg.setHeader("Content-Transfer-Encoding", "7bit");
            
            try {
                Transport.send(mimeMsg);
            } catch (MessagingException e) {
                throw new RuntimeException(e);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        textView.setText("送信完了");
    }
}