Android App Development - Send email directly with no Intents
12,409
Solution 1
Go through this below link. This is the example what you exactly want http://www.edumobile.org/android/send-email-on-button-click-without-email-chooser/
Solution 2
Hell @APX, Here is the tow class which help you to send email with single or multiple user without any library, I think this will help you,
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 MailSender 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 MailSender(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 from, String recipients) throws Exception {
try {
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/html"));
/*message.setSender(new InternetAddress(sender, "Dhaval Solanki"));*/
message.setFrom(new InternetAddress(sender, from));
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");
}
}
}
* 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;
}
});
}
}
You can use like following
MailSender sender = new MailSender("" + authEmail, "" + authPwd);
sender.sendMail("" + subject,
"" + prepareMailText(name),
"" + authEmail, "WeMeal Team",
"" + emailList); //email list send comma separated string like ("[email protected],[email protected]")
Author by
APX
Updated on June 15, 2022Comments
-
APX almost 2 years
Can anyone suggest how I can send an email without using intents or opening another android app. I want the email to be sent directly once I hit the send button. I must use a specific office365 email for sending message. Should I use some API or SMTP etc.?
Is there a simple way on how I can apply this feature on my android app?
-
APX about 7 yearsid rather to use office365 emails to send messages. is it possible? what params in this code that i must to change. some ports or hosts etc. thanks!
-
Dhaval Solanki about 7 yearsHi, try with Office 365 then it will not work then put following line in class constructor : props.put("mail.smtp.host", "m.outlook.com"); Following link will help you stackoverflow.com/questions/14430962/…
-
APX about 7 yearsOkay thanks. one more, how did you declare your " emailId[0] " ? ty
-
Dhaval Solanki about 7 yearsI have declared with string array you can pass here Email directly no need to define same as me, And if answer is helpful then please vote up and accept it,
-
Dhaval Solanki about 7 yearsHello, here no need to declare array object only pass string like "[email protected],[email protected],[email protected]" pass as argument or for more please check my answer was updated
-
APX about 7 yearssender.sendMail("" + subject, "" + prepareMailText(name), "" + authEmail, "WeMeal Team", "[email protected],[email protected],[email protected]"); Still gets an error. unhandled exception: java.lang.exception
-
Dhaval Solanki about 7 yearsCan you post full logo of exception here.
-
APX about 7 yearsError:(141, 24) error: unreported exception Exception; must be caught or declared to be thrown sender.sendMail("" + editTextLR, ^ 1 error Incremental compilation of 17 classes completed in 9.922 secs. :app:compileDebugJavaWithJavac FAILED
-
APX about 7 yearsFAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
-
APX about 7 yearsits not working on me. my application stopped. i change all the "[email protected]" emails and passwords into my own account. halp pls
-
user3451660 over 5 years@APX did you manage to fix it ? I have been struggling with the same problem on my app when I use my own gmail address and password. I also enabled that access to less secure devices setting in gmail.