-2

I recently followed:

link here

but in my app little difference that in above question only user name and password is available but i need to add name,emailid and message

what change i do in my application

when i click on submit mail goes to my email id : *********@gmail.com

and my code is :

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

Now I am confused that where I add name,emailid and message.

Community
  • 1
  • 1
Kartik Shah
  • 143
  • 2
  • 5
  • 14

1 Answers1

0

In Gmail Sender there is one method

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

which set account from which mail will be sent

I am using the same this is my 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");
        }
    }
}

Edit 1:

GmailSender sender=new GmailSender("YourUserName","YourPassword");
sender.sendMail("This is Subject","This is Body","sender@ymail.com","reciepent@mail.com");
Trikaldarshiii
  • 11,174
  • 16
  • 67
  • 95
  • but i need to add name,emailid,and message not username and password this is my format http://i42.tinypic.com/24b9sgk.png please help... – Kartik Shah Sep 15 '13 at 16:13
  • what you want? you want to send mail from your account or you will ask user to enter their username/password – Trikaldarshiii Sep 15 '13 at 16:18
  • a mail is only send from an account to some email so first you need a username/password from which mail will be sent then a sender whom you want to send – Trikaldarshiii Sep 15 '13 at 16:21
  • i ask user to enter only his email id when user enter his email id then mail from his email id goes to my mail id directly with message he written – Kartik Shah Sep 15 '13 at 17:39
  • when you don't know the password of his id then how can you use this to mail to your id i would suggest you to use ACTION_SEND to email – Trikaldarshiii Sep 15 '13 at 17:42
  • @KartikShah I have another suggestion you shall use your userName and password to send mail from your account to your account if you wish you can also added in subject saying sended from this id – Trikaldarshiii Sep 15 '13 at 17:47
  • using my GmailSender class your – Trikaldarshiii Sep 15 '13 at 17:51
  • i need direct sent her message and mail id with name to my id... hmm you are correct now what change i done in my coding to ask user name and password of user and sent mail to my id (i am receiver) should u show my image ?? – Kartik Shah Sep 15 '13 at 17:57
  • @KartikShah if you find your problem solved you shall accept and rate it – Trikaldarshiii Sep 15 '13 at 18:16
  • no my problem is not solved but because of internet problem i am not able to show your comments sorry and i add image to this link shows wht type of output i needed... [link](http://i42.tinypic.com/24b9sgk.png) – Kartik Shah Sep 16 '13 at 13:13
  • @KartikShah sorry i can't help any more i can talk for general technical problem not going to be specific Thanks – Trikaldarshiii Sep 16 '13 at 14:18