【Android】メール送信(GmailとJavaMail内蔵)

3929 ワード

AndroidがEmailを送信する2つの方法:
 
方法1:Intent呼び出しで内蔵のGmailを呼び出してメールを送る
長所:簡単、便利
欠点:柔軟性が欠けており、関連するgmailでしかメールを送信できません.
 
サンプルコード:
 
 
String[] recipients = {"       ", "       "};
String subject = "    ";
String text = "    ";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipients);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(intent, "Sending..."));
 
方法2:JavaMailでメールを送信する
利点:柔軟性
短所:複雑で構成が面倒
 
構成手順:
 
  • AndroidバージョンJavaMailパッケージ、additionalをダウンロードします.jar、mail.JArとactivation.JAr,ダウンロードアドレスJavaMail-Android
  • プロジェクトとsrcの同じディレクトリレベルでフォルダlibを新規作成し、ダウンロードした3つのjarパッケージをフォルダ
  • に入れる.
  • 右クリック->Properties->Java Build Path->Libraries、Add External JARsを選択し、プロジェクトの下にあるlibディレクトリの3つのjarパッケージ
  • を見つけます.
    実装手順:
     
  • メールサーバとのセッションセッションセッションセッションを確立
  • メールメッセージMINEMessage
  • の構築
  • Transport送信メール
  • 注意:
    AndroidManifestでネットワーク権限を追加
    セッションセッションセッションセッションのプロパティを構成する場合、値はブールではなくString型「true」と「false」です.
     
     
    サンプルコード:
     
    package dyingbleed.iteye;
    
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import javax.mail.util.ByteArrayDataSource;
    
    public class MailSender extends Authenticator {
    	
    	public static final String host = "smtp.gmail.com"; 
    	
    	private final String userName;
    	private final String password;
    	
    	private Session session;
    	
    	public MailSender(String userName, String password) {
    		this.userName = userName;
    		this.password = password;
    		
    		initialize(); //   
    	}
    	
    	private void initialize() {
    		Properties props = new Properties();
    		props.setProperty("mail.transport.protocol", "smtp");
    		props.setProperty("mail.host", host);
    		props.put("mail.smtp.auth", true);
    		
    		session = Session.getDefaultInstance(props, this);
    	}
    
    	@Override
    	protected PasswordAuthentication getPasswordAuthentication() {
    		return new PasswordAuthentication(userName, password);
    	}
    	
    	/**
    	 *   Email
    	 * @param subject   
    	 * @param body   
    	 * @param sender    
    	 * @param recipients    
    	 * @throws MessagingException 
    	 * @throws AddressException 
    	 * */
    	public synchronized void sendMail(String subject, String body, String sender, String recipients) throws AddressException, MessagingException {
    		MimeMessage message = new MimeMessage(session);
    		DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
    		
    		/*
    		 *   MIME  
    		 * */
    		message.setSender(new InternetAddress(sender));
    		message.setSubject(subject);
    		message.setDataHandler(handler);
    		if(recipients.contains(",")) {
    			message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
    		} else {
    			message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
    		}
    		
    		Transport.send(message); //  
    	}
    }