600 votes

Envoi d’Email dans Android utilisant l’API JavaMail sans utiliser l’application par défaut/built-in

<p>Je suis en train de créer un mail envoyer application dans Android.<p>Si j’utilise :</p><pre><code></code></pre><p>Ceci lancera l’application Android intégrée ; Je suis en train d’envoyer le courrier sur le bouton cliquez directement <strong>sans</strong> utiliser cette application.</p></p>

720voto

Vinayak B Points 16555

Envoyer un e-mail dans Android à l'aide de l'API JavaMail à l'aide de Gmail authentification

Étapes pour créer un exemple de Projet:

MailSenderActivity.java

YOUR PACKAGE;

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);   
                } 

            }
        });

    }
}

GmailSender.java

YOUR PACKAGE;

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");   
        }   
    }   
}  

JSSE Fournisseur

/*
 *  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;
            }
        });
    }
}

AJOUTER 3 pots trouve dans le lien suivant sur votre Projet Android

Cliquez ici - Comment ajouter des Pots

Exécutez le projet et de vérifier votre compte de messagerie du destinataire du courrier. Cheers!!

Espérons que cette aide

P. S. Et n'oubliez pas que vous ne pouvez pas faire l'exploitation du réseau à partir de l'une INTERFACE utilisateur de l'activité dans android. Par conséquent, il est recommandé d'utiliser AsyncTask pour éviter de réseau sur le thread principal exception.

Les fichiers Jar : https://code.google.com/p/javamail-android/

66voto

ashok reddy Points 353
<p>Je vous remercie pour vos précieuses informations. Code fonctionne très bien. Je suis en mesure d’ajouter la pièce jointe également par l’ajout de code suivant.<pre><code></code></pre></p>

51voto

ManuV Points 389
<blockquote> <p>Pas pu se connecter à l’hôte SMTP : smtp.gmail.com, port : 465</p> <p>Ajoutez cette ligne dans votre manifeste :</p><pre><code></code></pre></blockquote>

37voto

Funkyidol Points 1897

Vous pouvez utiliser l'API JavaMail pour gérer votre courrier électronique des tâches. JavaMail API est disponible dans JavaEE colis et de son bocal est disponible pour le téléchargement. Malheureusement, il ne peut pas être utilisé directement dans une application Android car il utilise des composants AWT qui sont totalement incompatibles dans Android.

Vous pouvez trouver l'Android port pour JavaMail à l'emplacement suivant: http://code.google.com/p/javamail-android/

Ajouter les pots de votre application et de l'utilisation de la méthode SMTP

25voto

Ryan Heitner Points 1586
<p>Afin d’aider les personnes obtenant un sur Main Thread Exception réseau avec une cible de SDK > 9. C’est à l’aide de code de droopie ci-dessus mais fonctionnera de la même façon pour tous.<pre><code></code></pre><p>Vous pouvez utiliser AsyncTask comme ci-dessous</p><pre><code></code></pre></p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: