我试图在Android中创建一个邮件发送应用程序。
如果我使用:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
这将启动内置的Android应用程序;我试图发送邮件按钮点击直接不使用这个应用程序。
我试图在Android中创建一个邮件发送应用程序。
如果我使用:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
这将启动内置的Android应用程序;我试图发送邮件按钮点击直接不使用这个应用程序。
当前回答
编辑:JavaMail 1.5.5声称支持Android,所以你不需要其他任何东西。
我已经将最新的JavaMail(1.5.4)移植到Android。它可以在Maven Central中获得,只需添加以下内容到build.gradle~~
compile 'eu.ocathain.com.sun.mail:javax.mail:1.5.4'
然后你就可以按照官方教程学习了。
源代码可以在这里找到:https://bitbucket.org/artbristol/javamail-forked-android
其他回答
package io.formics.tourguide
import android.annotation.SuppressLint
import android.content.Intent
import android.net.Credentials
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_feedback.*
import org.jetbrains.annotations.Async
import java.lang.Exception
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource
import javax.mail.*
import javax.mail.internet.*
class FeedbackActivity : AppCompatActivity() {
val props = Properties()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_feedback)
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");
btnSendEmail.setOnClickListener {
Thread {
try {
sendEmail()
// Your implementation
} catch (ex: Exception) {
ex.printStackTrace()
}
}.start()
}
}
private fun sendEmail() {
try {
val session = Session.getInstance(props,
object : javax.mail.Authenticator() {
//Authenticating the password
override fun getPasswordAuthentication(): javax.mail.PasswordAuthentication {
return PasswordAuthentication("abc@xyz.com", "password")
}
})
val message = MimeMessage(session);
message.setFrom(InternetAddress("abc@xyz.com"));
message.setRecipients(
Message.RecipientType.TO,
InternetAddress.parse(editCC.text.toString())
)
message.subject = editSubject.text.toString()
message.setText(
"Dear Mail Crawler,"
+ "\n\n No spam to my email, please!"
);
//val messageBodyPart = MimeBodyPart();
//val multipart = MimeMultipart();
//val file = "path of file to be attached";
// val fileName = "attachmentName"
// val source = FileDataSource(file);
//messageBodyPart.setDataHandler(DataHandler(source));
//messageBodyPart.setFileName(fileName);
//multipart.addBodyPart(messageBodyPart);
//message.setContent(multipart);
Transport.send(message);
System.out.println("Done");
} catch (e: MessagingException) {
throw RuntimeException(e);
}
}
}
其他答案中提供的所有代码都是正确的,运行正常,但有点混乱,所以我决定发布一个库(尽管仍在开发中),以更简单的方式使用它:AndroidMail。
你只需要创建一个MailSender,构建一个邮件并发送它(已经在后台处理了一个AsyncTask)。
MailSender mailSender = new MailSender(email, password);
Mail.MailBuilder builder = new Mail.MailBuilder();
Mail mail = builder
.setSender(senderMail)
.addRecipient(new Recipient(recipient))
.setText("Hello")
.build();
mailSender.sendMail(mail);
您可以收到通知的电子邮件发送,它还支持不同的收件人类型(TO,抄送和密件抄送),附件和html:
MailSender mailSender = new MailSender(email, password);
Mail.MailBuilder builder = new Mail.MailBuilder();
Mail mail = builder
.setSender(senderMail)
.addRecipient(new Recipient(recipient))
.addRecipient(new Recipient(Recipient.TYPE.CC, recipientCC))
.setText("Hello")
.setHtml("<h1 style=\"color:red;\">Hello</h1>")
.addAttachment(new Attachment(filePath, fileName))
.build();
mailSender.sendMail(mail, new MailSender.OnMailSentListener() {
@Override
public void onSuccess() {
// mail sent!
}
@Override
public void onError(Exception error) {
// something bad happened :(
}
});
您可以通过Gradle或Maven获取:
compile 'it.enricocandino:androidmail:1.0.0-SNAPSHOT'
如果你有任何问题,请告诉我!:)
那些正在获得ClassDefNotFoundError的人尝试移动这三个jar文件到你的项目的lib文件夹,它为我工作!!
无法连接到SMTP主机: Smtp.gmail.com,端口:465
在清单中添加这一行:
<uses-permission android:name="android.permission.INTERNET" />
谢谢你提供的宝贵信息。代码运行正常。我也可以通过添加以下代码添加附件。
private Multipart _multipart;
_multipart = new MimeMultipart();
public void addAttachment(String filename,String subject) throws Exception {
BodyPart messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
_multipart.addBodyPart(messageBodyPart);
BodyPart messageBodyPart2 = new MimeBodyPart();
messageBodyPart2.setText(subject);
_multipart.addBodyPart(messageBodyPart2);
}
message.setContent(_multipart);