Android下使用activation发送邮件

来源:互联网 发布:java中合法的标识符 编辑:程序博客网 时间:2024/05/31 19:02

1. 添加对如下jar包的引用activation.jar, additionnal.jar, mail.jar

2. 添加访问internet的权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


 

3. 实现如下两个类:

import java.security.AccessController;import java.security.Provider;public 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;             }         });     } }


 

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;    import java.io.ByteArrayInputStream;    import java.io.IOException;    import java.io.InputStream;    import java.io.OutputStream;    import java.security.Security;    import java.util.Properties;   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 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");            }        }}


 

4. 使用方法:

public class SendEmailTestActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                Button btnSend = (Button)findViewById(R.id.btnSend);        btnSend.setOnClickListener( new OnClickListener(){@Overridepublic void onClick(View arg0) {try {                   //发送方的邮箱名及密码。                    GMailSender sender = new GMailSender("*******@gmail.com", "*******");                     sender.sendMail("This is Subject",    //主题                            "This is Body",    //正文                            "xxx@gmail.com",  //发送人                              "*******@gmail.com"); //收件人,不一定非得gmail其他邮箱比如163,qq邮箱都行。                    Toast.makeText(getBaseContext(), "发送成功!",Toast.LENGTH_LONG).show();                } catch (Exception e) {                        Log.e("SendMail", e.getMessage(), e);                       Toast.makeText(getBaseContext(), "发送失败"+e.getMessage(),Toast.LENGTH_LONG).show();                                } }        });    }}


 

原创粉丝点击