• Android客户端后台发送邮件(JMail)


    今天在做项目的时候要处理用户注册问题,里面有个邮箱验证,网上找了一下果然有人做过,但是我拿过来都运行不起来,或者是发送不了邮件。后来我对这个浅浅的研究了一下,贴出来和大家共享。

    Activity

    package e.m;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    public class MailSenderActivity extends Activity {
    	/** Called when the activity is first created. */
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		final Button send = (Button) this.findViewById(R.id.send);
    		send.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				try {
    					GMailSender sender = new GMailSender("lixq@gmail.com",
    							"xxxxxx");
    					sender.sendMail("This is Subject", "This is Body",
    							"lixq@gmail.com", "lxqxxxxxu@163.com");
    				} catch (Exception e) {
    					Log.e("SendMail", e.getMessage(), e);
    				}
    			}
    		});
    	}
    }
    

    package e.m;
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.security.Security;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    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;
    
    public class GMailSender extends javax.mail.Authenticator {        
        private String mailhost = "smtp.gmail.com";
        private String user;
        private String password;
        private Session session;
        static {
            Security.addProvider(new e.m.JSSEProvider());
        }
        public GMailSender(String user, String password) {
            this.user = user;
            this.password = password;
             Properties props = new Properties();
            props.setProperty("mail.transport.protocol", "smtp");
            props.setProperty("mail.host", mailhost);
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.port", "465");
            props.put("mail.smtp.socketFactory.port", "465");
            props.put("mail.smtp.socketFactory.class",
                    "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.socketFactory.fallback", "false");
    
            props.setProperty("mail.smtp.quitwait", "false");
             session = Session.getDefaultInstance(props, this);
        } 
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user, password);
        } 
        public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
            try{
         MimeMessage message = new MimeMessage(session);
            DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
            message.setSender(new InternetAddress(sender));
            message.setSubject(subject);
            message.setDataHandler(handler);
            if (recipients.indexOf(',') > 0)
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
            else
               message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
            Transport.send(message);
            }catch(Exception e){ 
         } 
    }  
       public class ByteArrayDataSource implements DataSource { 
           private byte[] data;
            private String type; 
            public ByteArrayDataSource(byte[] data, String type) { 
               super();
                this.data = data;
                this.type = type;
            }
             public ByteArrayDataSource(byte[] data) {
                super();
                this.data = data;
            }
             public void setType(String type) { 
               this.type = type;
            } 
            public String getContentType() {
                if (type == null)
                    return "application/octet-stream";
                else
                   return type; 
           }
             public InputStream getInputStream() throws IOException {
                return new ByteArrayInputStream(data);
            }
             public String getName() {
                return "ByteArrayDataSource";
            }
             public OutputStream getOutputStream() throws IOException {
                throw new IOException("Not Supported");
            }
        }
    }   
    

    package e.m;
    
    import java.security.AccessController;
    import java.security.Provider;
      
    public final class JSSEProvider extends Provider {
          public JSSEProvider() {
             super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
             AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
                 public Void run() { 
                    put("SSLContext.TLS",
                             "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
                     put("Alg.Alias.SSLContext.TLSv1", "TLS");
                     put("KeyManagerFactory.X509",
                             "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
                     put("TrustManagerFactory.X509",
                             "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
                     return null;
                 } 
            });
         }
     } 
    

    如果是4.0以上请将以下代码放到线程中运行。

    try {
    					GMailSender sender = new GMailSender("lixq@gmail.com",
    							"xxxxxx");
    					sender.sendMail("This is Subject", "This is Body",
    							"lixq@gmail.com", "lxqxxxxxu@163.com");
    				} catch (Exception e) {
    					Log.e("SendMail", e.getMessage(), e);
    				}

    注意:这里我用的是google邮箱,如果要换其他邮箱,要在代码中设置相应的服务器。



  • 相关阅读:
    premake Ubuntu下的安装
    android设置eclipse中的自动提示功能
    SharePoint 2013的100个新功能之搜索(二)
    poj 4014 Dice 贪心
    代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
    Android 英文文档下载地址
    winform网络编程之TcpClient类,TcpListener类和UdpClient类
    Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
    const对象默觉得文件的局部变量
    springmvc自己定义拦截器
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469642.html
Copyright © 2020-2023  润新知