我如何从我的主要活动中调用JavaEmail类?
这是我的android studio项目中一个单独的java类文件中的示例代码。(在本例中,我只留下了示例凭据,但我在自己的代码中用实际值替换了它们) 电子邮件永远不会被发送。我也在文件中添加了一个日志,但我在日志猫中没有看到它,因为我猜它甚至没有调用构造函数。这对于我理解调用类来说是一个简单的问题,但我还不明白。JavaEmail的main方法接受args参数,我认为我不需要这个参数,所以如果我从JavaEmail类中删除main参数,我会像这样更改onCreate调用我如何从我的主要活动中调用JavaEmail类?,java,android,class,Java,Android,Class,这是我的android studio项目中一个单独的java类文件中的示例代码。(在本例中,我只留下了示例凭据,但我在自己的代码中用实际值替换了它们) 电子邮件永远不会被发送。我也在文件中添加了一个日志,但我在日志猫中没有看到它,因为我猜它甚至没有调用构造函数。这对于我理解调用类来说是一个简单的问题,但我还不明白。JavaEmail的main方法接受args参数,我认为我不需要这个参数,所以如果我从JavaEmail类中删除main参数,我会像这样更改onCreate调用 JavaEmail.m
JavaEmail.main();
这会在编译之前出现:Unhandled exception:javax.mail.MessaginException错误
感谢您的帮助。我在swing应用程序中也做了同样的事情,我创建了一个名为SendEmail的类,该类有一个生成otp并发送它的方法
class SendEmail
{
String from = "username"; // GMail user name
String pass = "password";
public void sendOTPEmail(String email)
{
String otp=OTP.generate();
String to[] = {email}; // list of recipient email addresses
String subject = "One Time Password";
String body = "<html>\n" +
" <body>\n" +
" <div style='font-size:17px; font-family:cambria'>\n" +
" OTP is generated for changing password of JavaLearn System acount associated with this email.<br><br>\n" +
" Your OTP is:<br>\n" +
" <center>\n" +
" <div style='color:red;font-size:18px; font-family:cambria; border:2px solid black'>\n" +
" \n" +otp+
" </div>\n" +
" </center>\n" +
" </div>\n" +
" </body>\n" +
" </html>";
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setContent(body, "text/html; charset=utf-8");
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
Java是一种深层语言。多年没用过,也不是专家。无论如何,感谢这篇伟大的文章,我得到了我需要的工作。没什么特别的,但它可以作为我的测试学习科目 就像Michael在他的评论中所说的,它必须在后台完成,我只是分配了变量,这还不足以让构造函数运行 通过在build.gradle文件中现有代码的下面添加以下代码来引用API,我不必加载任何jar文件:(自1.6.1崩溃以来,我还必须使用库的1.6.0版本)
非常有趣。我也要试试。谢谢嗨@pritam,我有很多错误。线程行显示它缺少分号(;),无法解析getDefaultInstance,无法解析symbol RecipientType。它无法解析构造函数mimessage(session),并且存在大量未处理的异常。嘿@Mickey D,很抱歉,缺少分号!!我刚刚编辑了那部分!并确保您正在使用它所需的jar文件。我很久以前就编写了这个程序,但我想它只需要2个jar,即activation.jar和mail.jar!是的,谢谢,我猜这是一种非常古老的技术,因为线程行现在给出了以下错误:语言级别“1.7”不支持Lambda表达式
JavaEmail.main();
class SendEmail
{
String from = "username"; // GMail user name
String pass = "password";
public void sendOTPEmail(String email)
{
String otp=OTP.generate();
String to[] = {email}; // list of recipient email addresses
String subject = "One Time Password";
String body = "<html>\n" +
" <body>\n" +
" <div style='font-size:17px; font-family:cambria'>\n" +
" OTP is generated for changing password of JavaLearn System acount associated with this email.<br><br>\n" +
" Your OTP is:<br>\n" +
" <center>\n" +
" <div style='color:red;font-size:18px; font-family:cambria; border:2px solid black'>\n" +
" \n" +otp+
" </div>\n" +
" </center>\n" +
" </div>\n" +
" </body>\n" +
" </html>";
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setContent(body, "text/html; charset=utf-8");
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
}
String to="abc@gmail.com";
Thread t1=new Thread(()->{new SendEmail().sendOTPEmail(to);});
t1.start();
android {
packagingOptions {
//pickFirst 'META-INF/LICENSE.txt' // picks the JavaMail license file
exclude 'META-INF/LICENSE'
exclude 'META-INF/mimetypes.default'
exclude 'META-INF/mailcap.default'
}
}
repositories {
jcenter()
maven {
url "https://maven.java.net/content/groups/public/"
}
}
dependencies {
//Problem with compiling 1.6.1 so using older version
//https://stackoverflow.com/questions/49575982/after-update-to-android-studio-3-1-the-project-does-not-build-program-type-alre
implementation 'com.sun.mail:android-mail:1.6.0'
implementation 'com.sun.mail:android-activation:1.6.0'
}