• android 发送邮件相关文章


    Sending Email in Android using JavaMail API without using the default/built-in app

    MailSenderActivity.java

    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("username@gmail.com", "password");
                        sender.sendMail("This is Subject",   
                                "This is Body",   
                                "user@gmail.com",   
                                "user@yahoo.com");   
                    } catch (Exception e) {   
                        Log.e("SendMail", e.getMessage(), e);   
                    } 
    
                }
            });
    
        }
    }
    View Code

    GmailSender.java

    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 com.provider.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");   
            }   
        }   
    }  
    View Code

    JSSE Provider

    /*
     *  Licensed to the Apache Software Foundation (ASF) under one or more
     *  contributor license agreements.  See the NOTICE file distributed with
     *  this work for additional information regarding copyright ownership.
     *  The ASF licenses this file to You under the Apache License, Version 2.0
     *  (the "License"); you may not use this file except in compliance with
     *  the License.  You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     *  Unless required by applicable law or agreed to in writing, software
     *  distributed under the License is distributed on an "AS IS" BASIS,
     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *  See the License for the specific language governing permissions and
     *  limitations under the License.
     */
    
    /**
     * @author Alexander Y. Kleymenov
     * @version $Revision$
     */
    
    
    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;
                }
            });
        }
    }
    View Code

    ADD 3 jars found in the following link to your Android Project

    Use JavaMail API to send mail without using SSL

  • 相关阅读:
    android 中 文件的 MIME 类型 【部分内容】
    Linux下的计划任务 crontab
    监控 某个目录下文件的创建,给据创建的文件进行执行命令
    SUSE下试着搭建了一个web 做个记录
    Android 学习 — Activity
    数据库字段不规范
    浅谈测试团队规范建设
    QA拒绝上线的理由
    Bugzilla安装部署精要
    Linux下部署Bugzilla和TestLink
  • 原文地址:https://www.cnblogs.com/czpblog/p/3334549.html
Copyright © 2020-2023  润新知