Reputation: 3417
I'd like to send a message thru email without using intent. When I press the button, instead of "Email was sent successfully" is the toast message, it shows "Email was not sent" and it doesn't sending the email. Can someone help me regarding this matter?
MainActivity.java
@SuppressLint("SdCardPath")
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
Button addImage = (Button) findViewById(R.id.send_email);
addImage.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Mail m = new Mail("[email protected]", "password");
String[] toArr = {"[email protected]"};
m.setTo(toArr);
m.setFrom("[email protected]");
m.setSubject("Email Test");
m.setBody("This is an email sent using my Mail JavaMail wrapper from an Android device.");
try {
m.addAttachment("/sdcard/filelocation");
if(m.send()) {
Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Email was not sent.", Toast.LENGTH_LONG).show();
}
} catch(Exception e) {
//Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
Log.e("MailApp", "Could not send email", e);
}
}
});
}
Mail.java
public Mail() {
_host = "smtp.gmail.com"; // default smtp server
_port = "465"; // default smtp port
_sport = "465"; // default socketfactory port
_user = ""; // username
_pass = ""; // password
_from = ""; // email sent from
_subject = ""; // email subject
_body = ""; // email body
_debuggable = false; // debug mode on or off - default off
_auth = true; // smtp authentication - default on
_multipart = new MimeMultipart();
// There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
}
public Mail(String user, String pass) {
this();
_user = user;
_pass = pass;
}
public boolean send() throws Exception {
Properties props = _setProperties();
if(_user.equals("") && _pass.equals("") && _to.length > 0 && _from.equals("") && _subject.equals("") && _body.equals("")) {
Session session = Session.getInstance(props, this);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(_from));
InternetAddress[] addressTo = new InternetAddress[_to.length];
for (int i = 0; i < _to.length; i++) {
addressTo[i] = new InternetAddress(_to[i]);
}
msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
msg.setSubject(_subject);
msg.setSentDate(new Date());
// setup message body
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(_body);
_multipart.addBodyPart(messageBodyPart);
// Put parts in message
msg.setContent(_multipart);
// send email
Transport.send(msg);
return true;
} else {
return false;
}
}
public void addAttachment(String filename) throws Exception {
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
_multipart.addBodyPart(messageBodyPart);
}
@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(_user, _pass);
}
private Properties _setProperties() {
Properties props = new Properties();
props.put("mail.smtp.host", _host);
if(_debuggable) {
props.put("mail.debug", "true");
}
if(_auth) {
props.put("mail.smtp.auth", "true");
}
props.put("mail.smtp.port", _port);
props.put("mail.smtp.socketFactory.port", _sport);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
return props;
}
Logcat
06-20 17:01:16.889: E/MailApp(7081): Could not send email
06-20 17:01:16.889: E/MailApp(7081): java.lang.NullPointerException
06-20 17:01:16.889: E/MailApp(7081): at java.util.Hashtable.put(Hashtable.java:365)
06-20 17:01:16.889: E/MailApp(7081): at com.example.emailtest.Mail._setProperties(Mail.java:117)
06-20 17:01:16.889: E/MailApp(7081): at com.example.emailtest.Mail.send(Mail.java:72)
06-20 17:01:16.889: E/MailApp(7081): at com.example.emailtest.MainActivity$1.onClick(MainActivity.java:36)
06-20 17:01:16.889: E/MailApp(7081): at android.view.View.performClick(View.java:3558)
06-20 17:01:16.889: E/MailApp(7081): at android.view.View$PerformClick.run(View.java:14157)
06-20 17:01:16.889: E/MailApp(7081): at android.os.Handler.handleCallback(Handler.java:605)
06-20 17:01:16.889: E/MailApp(7081): at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 17:01:16.889: E/MailApp(7081): at android.os.Looper.loop(Looper.java:137)
06-20 17:01:16.889: E/MailApp(7081): at android.app.ActivityThread.main(ActivityThread.java:4514)
06-20 17:01:16.889: E/MailApp(7081): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 17:01:16.889: E/MailApp(7081): at java.lang.reflect.Method.invoke(Method.java:511)
06-20 17:01:16.889: E/MailApp(7081): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-20 17:01:16.889: E/MailApp(7081): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-20 17:01:16.889: E/MailApp(7081): at dalvik.system.NativeStart.main(Native Method)
Upvotes: 3
Views: 9582
Reputation: 1138
Try this- I had tried it worked for me...
http://androidautomail.blogspot.in/2013/06/auto-generated-mail-from-android.html?m=1
Sending Email in Android using JavaMail API without using the default/built-in app
Upvotes: 5