您好我正在开发一个Android应用程序,它将点击一个按钮发送邮件。代码起初工作但由于某种原因它现在不起作用。有人可以帮我这个吗? xyz@outlook.com是收件人。 abc@gmail.com是发件人。 我已对主题和邮件正文进行了硬编码。
package com.example.clc_construction;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
public class Email extends Activity
{
public String jobNo;
public String teamNo;
private static final String username = "abc@gmail.com";
private static final String password = "000000";
private static final String emailid = "xyz@outlook.com";
private static final String subject = "Photo";
private static final String message = "Hello";
private Multipart multipart = new MimeMultipart();
private MimeBodyPart messageBodyPart = new MimeBodyPart();
public File mediaFile;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.camera_screen);
Intent intent = getIntent();
jobNo = intent.getStringExtra("Job_No");
teamNo = intent.getStringExtra("Team_No");
sendMail(emailid,subject,message);
}
private void sendMail(String email, String subject, String messageBody)
{
Session session = createSessionObject();
try {
Message message = createMessage(email, subject, messageBody, session);
new SendMailTask().execute(message);
}
catch (AddressException e)
{
e.printStackTrace();
}
catch (MessagingException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
private Session createSessionObject()
{
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
return Session.getInstance(properties, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
}
private Message createMessage(String email, String subject, String messageBody, Session session) throws
MessagingException, UnsupportedEncodingException
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("xzy@outlook.com", "Naveed Qureshi"));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(email, email));
message.setSubject(subject);
message.setText(messageBody);
return message;
}
public class SendMailTask extends AsyncTask<Message, Void, Void>
{
private ProgressDialog progressDialog;
@Override
protected void onPreExecute()
{
super.onPreExecute();
progressDialog = ProgressDialog.show(Email.this, "Please wait", "Sending mail", true, false);
}
@Override
protected void onPostExecute(Void aVoid)
{
super.onPostExecute(aVoid);
progressDialog.dismiss();
}
protected Void doInBackground(javax.mail.Message... messages)
{
try
{
Transport.send(messages[0]);
} catch (MessagingException e)
{
e.printStackTrace();
}
return null;
}
}
}
答案 0 :(得分:18)
输入您的清单文件,
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
检查您是否有互联网连接,
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
并最终使用此代码发送电子邮件
final String username = "username@gmail.com";
final String password = "password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from-email@gmail.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("to-email@gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler,"
+ "\n\n No spam to my email, please!");
MimeBodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
messageBodyPart = new MimeBodyPart();
String file = "path of file to be attached";
String fileName = "attachmentName"
DataSource source = new FileDataSource(file);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
答案 1 :(得分:1)
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
}
dependencies {
compile 'com.sun.mail:android-mail:1.5.5'
compile 'com.sun.mail:android-activation:1.5.5'
}
android {
packagingOptions {
pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
}
}
添加此异步任务以发送邮件
public class sendemail extends AsyncTask<String, Integer, Integer> {
ProgressDialog progressDialog;
private StringBuilder all_email;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(GetuserActivity.this);
progressDialog.setMessage("Uploading, please wait...");
progressDialog.show();
if (selecteduser_arr != null) {
all_email = new StringBuilder();
for (int i = 0; i < selecteduser_arr.size(); i++) {
if (i == 0) {
all_email.append(selecteduser_arr.get(i));
} else {
String temp = "," + selecteduser_arr.get(i);
all_email.append(temp);
}
}
}
}
@Override
protected Integer doInBackground(String... strings) {
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("enterhereyouremail", "enterherepassword");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("enterhereyouremail"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("sendermail@gmail.com,sendermail2@gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear Mail Crawler," +
"\n\n No spam to my email, please!");
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
return 1;
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
progressDialog.dismiss();
}
}
答案 2 :(得分:0)
由于您之前说它之前有效,因此您的应用应该已经拥有互联网权限和其他必要的权限。
答案 3 :(得分:0)
尝试使用端口465
private Session createSessionObject()
{
Properties properties = new Properties();
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.host", "smtp.gmail.com");
properties.setProperty("mail.smtp.port", "465");
return Session.getInstance(properties, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
}
答案 4 :(得分:0)
我认为您不必使用SMTP逻辑轰炸您的android源代码。
这是您可以做的:
使用改造来调用Web服务。
电子邮件发送成功!
Php邮件收发器非常易于使用和发送电子邮件。以下是一些示例:
答案 5 :(得分:0)
这是Kotlin中的代码。
请确保在Gmail中启用不太安全的应用访问。要使用安全访问,您将需要使用OAUTH2。
有关更多信息,请访问:OAuth 2.0 Mechanism
val username = "username"
val password = "email@gmail.com"
try {
val props = Properties()
props["mail.smtp.auth"] = "true"
props["mail.smtp.starttls.enable"] = "true"
props["mail.smtp.host"] = "smtp.gmail.com"
props["mail.smtp.port"] = "587"
val session = Session.getInstance(props, object : Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication? {
return PasswordAuthentication(username, password)
}
})
val message = MimeMessage(session)
message.setFrom(username)
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("email@gmail.com"))
message.subject = "Automated Violation Detection Email";
message.setText(
"Your Text"
)
Thread {
Transport.send(message)
}.start()
} catch (e: Exception) {
println("Error: $e")
showToastLong("Oops! Something Went Wrong! Please Try Again")
}