Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何从我的主要活动中调用JavaEmail类?_Java_Android_Class - Fatal编程技术网

我如何从我的主要活动中调用JavaEmail类?

我如何从我的主要活动中调用JavaEmail类?,java,android,class,Java,Android,Class,这是我的android studio项目中一个单独的java类文件中的示例代码。(在本例中,我只留下了示例凭据,但我在自己的代码中用实际值替换了它们) 电子邮件永远不会被发送。我也在文件中添加了一个日志,但我在日志猫中没有看到它,因为我猜它甚至没有调用构造函数。这对于我理解调用类来说是一个简单的问题,但我还不明白。JavaEmail的main方法接受args参数,我认为我不需要这个参数,所以如果我从JavaEmail类中删除main参数,我会像这样更改onCreate调用 JavaEmail.m

这是我的android studio项目中一个单独的java类文件中的示例代码。(在本例中,我只留下了示例凭据,但我在自己的代码中用实际值替换了它们)

电子邮件永远不会被发送。我也在文件中添加了一个日志,但我在日志猫中没有看到它,因为我猜它甚至没有调用构造函数。这对于我理解调用类来说是一个简单的问题,但我还不明白。JavaEmail的main方法接受args参数,我认为我不需要这个参数,所以如果我从JavaEmail类中删除main参数,我会像这样更改onCreate调用

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'
}