当用户点击提交邮件转到我的电子邮件

时间:2013-09-15 15:45:33

标签: java android smtp user-feedback

我最近跟着:

link here

但在我的应用程序中差别不大,在上述问题中只有用户名和密码可用,但我需要添加名称,emailid和消息

我在申请中做了什么改变

当我点击提交邮件时,会转到我的电子邮件ID:*********@gmail.com

我的代码是:

MailActivity.java

package com.amcct.amcostapp;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MailActivity extends Activity 
{

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mail);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.mail, menu);
        return true;
    }

    final Button submit_button= (Button) this.findViewById(R.id.button1);
    View.OnClickListener Button1_Listener=new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try
            {
            GmailSender sender=new GmailSender("editText1","editText2","editText3");
            sender.sendMail("This is Subject","This is Body"
                    ,"user@ymail.com");
            }
            catch(Exception e)
            {
                Log.e("sendMail",e.getMessage(),e);
            }
        }
    };


}

GmailSender.java

package com.amcct.amcostapp;
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.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import android.os.Message;

//simple mail transfer protocol

public class GmailSender extends javax.mail.Authenticator 
{   
    private String mailhost="smtp.gmail.com";
    private String name;
    private String emailid;
    private String message;
    private Session session;

    static
    {
        Security.addProvider(new com.amcct.JSSEProvider());
    }

public GmailSender(String name,String emailid,String message)
{
    this.name=name;
    this.emailid=emailid;
    this.message=message;

    Properties prop=new Properties();
    prop.setProperty("mail.transport.protocol","smtp");
    prop.setProperty("mail.host",mailhost);
    prop.put("mail.smtp.auth","true");
    prop.put("mail.smtp.port", "465");   
    prop.put("mail.smtp.socketFactory.port", "465");   
    prop.put("mail.smtp.socketFactory.class",   
            "javax.net.ssl.SSLSocketFactory");   
    prop.put("mail.smtp.socketFactory.fallback", "false");

    session=Session.getDefaultInstance(prop,this);


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

JSSEProvider.java

package com.amcct;

import java.security.AccessController;
import java.security.Provider;

public class JSSEProvider extends Provider 
{
     /**
     * 
     */
    private static final long serialVersionUID = -4241732100545779346L;

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

现在我很困惑,我添加名称,emailid和消息。

1 个答案:

答案 0 :(得分:0)

在Gmail发件人中有一种方法

protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(user, password);
}

设置将从中发送邮件的帐户

我使用的是同样的,这是我的GmailSender

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 {
        Log.d("EmailSender", "Sending Mail initiallized");

        try {
            MimeMessage message = new MimeMessage(session);
            DataHandler handler = new DataHandler(new ByteArrayDataSource(
                    body.getBytes(), "text/plain"));
            message.setFrom(new InternetAddress(sender));
            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");
        }
    }
}

编辑1:

GmailSender sender=new GmailSender("YourUserName","YourPassword");
sender.sendMail("This is Subject","This is Body","sender@ymail.com","reciepent@mail.com");