不幸的是,单击"发送邮件"按钮时,我的程序停止了.我已经添加了三个jar文件和互联网权限



我一直在尝试使用适用于Android的java mail api发送电子邮件一段时间了。我已经在互联网上尝试了几个代码,但是当apk在移动设备上运行时,仍然不断收到相同的错误消息,上面写着"appName不幸停止"。我是安卓新手,如果有人能在这个平台上帮助我,我会很高兴。我也在使用安卓工作室作为我的IDE。
谢谢 下面是我的 XML 的代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.rollxreuben.mailing.MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn"
        android:text="Send Mail"
        android:gravity="center_horizontal"
        />
</android.support.constraint.ConstraintLayout>

下面是 java 类的代码

    package com.example.rollxreuben.mailing;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    import java.util.Properties;
    import javax.mail.Authenticator;
    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;
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
            private Button btn;
        Session session = null;
        ProgressDialog pDialog = null;
        Context context = null;
        String rec, receipt;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
            btn = (Button)findViewById(R.id.btn);
            btn.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
            Properties props = new Properties();
            props.put("mail.smtp.port","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.socketFactory.port", "465");
            session  = Session.getDefaultInstance(props, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("email@gmail.com","PASSWORD");
                }
            });
            pDialog = ProgressDialog.show(context,"","Sending Mail",true);
            SendMail sendMail = new SendMail();
            sendMail.execute();
        }
    }

发送邮件类:

private class SendMail extends AsyncTask<String, Void, String> {
        private ProgressDialog progressDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Sending mail", true, false);
        }
        @Override
        protected void onPostExecute(String aVoid) {
            progressDialog.dismiss();
            Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
            super.onPostExecute(aVoid);
        }
        protected String doInBackground(String... params) {
            try {
                Message message = new MimeMessage(session);
                message.setFrom(new InternetAddress("busben97@gmail.com"));
                message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("busben97@gmail.com"));
                message.setSubject("Testing Mail");
                message.setContent("Hello ","text/html; charset=utf-8");
                Transport.send(message);
            } catch(Exception e) {
                Toast.makeText(MainActivity.this,e.toString(),Toast.LENGTH_LONG).show();
            }
            return null;
        }
    }


}

最后这是我的清单:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.rollxreuben.mailing">
        <uses-permission android:name="android.permission.INTERNET"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
//This is the log file
07-05 17:00:37.129 4376-4376/? I/art: Not late-enabling -Xcheck:jni (already on)
07-05 17:00:37.129 4376-4376/? W/art: Unexpected CPU variant for X86 using defaults: x86
07-05 17:00:38.381 4376-4376/com.example.rollxreuben.mailing W/System: ClassLoader referenced unknown path: /data/app/com.example.rollxreuben.mailing-2/lib/x86
07-05 17:00:38.389 4376-4376/com.example.rollxreuben.mailing I/InstantRun: starting instant run server: is main process
07-05 17:00:38.446 4376-4376/com.example.rollxreuben.mailing W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-05 17:00:39.785 4376-4402/com.example.rollxreuben.mailing I/OpenGLRenderer: Initialized EGL, version 1.4
07-05 17:00:39.785 4376-4402/com.example.rollxreuben.mailing D/OpenGLRenderer: Swap behavior 1
07-05 17:00:40.838 4376-4376/com.example.rollxreuben.mailing W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
07-05 17:00:40.848 4376-4376/com.example.rollxreuben.mailing I/Choreographer: Skipped 96 frames!  The application may be doing too much work on its main thread.
07-05 17:00:44.293 4376-4376/com.example.rollxreuben.mailing I/Choreographer: Skipped 206 frames!  The application may be doing too much work on its main thread.
07-05 17:01:17.648 4376-4939/com.example.rollxreuben.mailing W/art: Verification of java.lang.String javax.mail.internet.MimeUtility.encodeWord(java.lang.String, java.lang.String, java.lang.String, boolean) took 105.438ms
07-05 17:01:17.752 4376-4939/com.example.rollxreuben.mailing E/Exception: For input string: "smtp.gmail.com"
                                                                          java.lang.NumberFormatException: For input string: "smtp.gmail.com"
                                                                              at java.lang.Integer.parseInt(Integer.java:521)
                                                                              at java.lang.Integer.parseInt(Integer.java:556)
                                                                              at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:398)
                                                                              at javax.mail.Service.connect(Service.java:310)
                                                                              at javax.mail.Service.connect(Service.java:169)
                                                                              at javax.mail.Service.connect(Service.java:118)
                                                                              at javax.mail.Transport.send0(Transport.java:188)
                                                                              at javax.mail.Transport.send(Transport.java:118)
                                                                              at com.example.rollxreuben.mailing.MainActivity$SendMail.doInBackground(MainActivity.java:93)
                                                                              at com.example.rollxreuben.mailing.MainActivity$SendMail.doInBackground(MainActivity.java:66)
                                                                              at android.os.AsyncTask$2.call(AsyncTask.java:305)
                                                                              at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                              at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
                                                                              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                                                              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                                                              at java.lang.Thread.run(Thread.java:761)
07-05 17:01:18.733 4376-4376/com.example.rollxreuben.mailing I/Choreographer: Skipped 71 frames!  The application may be doing too much work on its main thread.
07-05 17:01:20.603 4376-4376/com.example.rollxreuben.mailing I/Choreographer: Skipped 111 frames!  The application may be doing too much work on its main thread.

java.lang.NumberFormatException: 对于输入字符串:"smtp.gmail.com">

该错误是由非数值smtp.gmail.com parseInt()引起的

这是由这条线引起的props.put("mail.smtp.port","smtp.gmail.com");

port 应该是您要传递主机地址的数字,要么更改密钥mail.smtp.port,要么更改值smtp.gmail.com

最新更新