有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (6) 个答案

  1. # 1 楼答案

    感谢您提供的宝贵信息。代码运行良好。我可以通过添加以下代码来添加附件

    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);
    
  2. # 2 楼答案

    您可以使用JavaMail API来处理电子邮件任务。JavaMail API在JavaEE包中提供,其jar可供下载。不幸的是,它不能直接在Android应用程序中使用,因为它使用的AWT组件在Android中完全不兼容

    您可以在以下位置找到JavaMail的Android端口: http://code.google.com/p/javamail-android/

    将JAR添加到应用程序并使用SMTP方法

  3. # 3 楼答案

    100%使用演示代码,您还可以使用此答案发送多封电子邮件

    下载项目HERE

    步骤1:下载邮件、激活、其他jar文件,并添加到android studio中的项目库文件夹中。我添加了一个屏幕截图,请参见下面的Download link

    libs add

    使用gmail登录(使用您的from mail)并打开切换按钮LINK

    大多数人都忘记了这一步,我希望你不会忘记

    步骤2:完成此过程后。将这些类复制并通过到项目中

    GMail。java

    import android.util.Log;
    
    import java.io.UnsupportedEncodingException;
    import java.util.List;
    import java.util.Properties;
    
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.AddressException;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    public class GMail {
    
        final String emailPort = "587";// gmail's smtp port
        final String smtpAuth = "true";
        final String starttls = "true";
        final String emailHost = "smtp.gmail.com";
    
    
        String fromEmail;
        String fromPassword;
        List<String> toEmailList;
        String emailSubject;
        String emailBody;
    
        Properties emailProperties;
        Session mailSession;
        MimeMessage emailMessage;
    
        public GMail() {
    
        }
    
        public GMail(String fromEmail, String fromPassword,
                List<String> toEmailList, String emailSubject, String emailBody) {
            this.fromEmail = fromEmail;
            this.fromPassword = fromPassword;
            this.toEmailList = toEmailList;
            this.emailSubject = emailSubject;
            this.emailBody = emailBody;
    
            emailProperties = System.getProperties();
            emailProperties.put("mail.smtp.port", emailPort);
            emailProperties.put("mail.smtp.auth", smtpAuth);
            emailProperties.put("mail.smtp.starttls.enable", starttls);
            Log.i("GMail", "Mail server properties set.");
        }
    
        public MimeMessage createEmailMessage() throws AddressException,
                MessagingException, UnsupportedEncodingException {
    
            mailSession = Session.getDefaultInstance(emailProperties, null);
            emailMessage = new MimeMessage(mailSession);
    
            emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));
            for (String toEmail : toEmailList) {
                Log.i("GMail", "toEmail: " + toEmail);
                emailMessage.addRecipient(Message.RecipientType.TO,
                        new InternetAddress(toEmail));
            }
    
            emailMessage.setSubject(emailSubject);
            emailMessage.setContent(emailBody, "text/html");// for a html email
            // emailMessage.setText(emailBody);// for a text email
            Log.i("GMail", "Email Message created.");
            return emailMessage;
        }
    
        public void sendEmail() throws AddressException, MessagingException {
    
            Transport transport = mailSession.getTransport("smtp");
            transport.connect(emailHost, fromEmail, fromPassword);
            Log.i("GMail", "allrecipients: " + emailMessage.getAllRecipients());
            transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
            transport.close();
            Log.i("GMail", "Email sent successfully.");
        }
    
    }
    

    SendMailTask。java

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.util.Log;
    
    import java.util.List;
    
    public class SendMailTask extends AsyncTask {
    
        private ProgressDialog statusDialog;
        private Activity sendMailActivity;
    
        public SendMailTask(Activity activity) {
            sendMailActivity = activity;
    
        }
    
        protected void onPreExecute() {
            statusDialog = new ProgressDialog(sendMailActivity);
            statusDialog.setMessage("Getting ready...");
            statusDialog.setIndeterminate(false);
            statusDialog.setCancelable(false);
            statusDialog.show();
        }
    
        @Override
        protected Object doInBackground(Object... args) {
            try {
                Log.i("SendMailTask", "About to instantiate GMail...");
                publishProgress("Processing input....");
                GMail androidEmail = new GMail(args[0].toString(),
                        args[1].toString(), (List) args[2], args[3].toString(),
                        args[4].toString());
                publishProgress("Preparing mail message....");
                androidEmail.createEmailMessage();
                publishProgress("Sending email....");
                androidEmail.sendEmail();
                publishProgress("Email Sent.");
                Log.i("SendMailTask", "Mail Sent.");
            } catch (Exception e) {
                publishProgress(e.getMessage());
                Log.e("SendMailTask", e.getMessage(), e);
            }
            return null;
        }
    
        @Override
        public void onProgressUpdate(Object... values) {
            statusDialog.setMessage(values[0].toString());
    
        }
    
        @Override
        public void onPostExecute(Object result) {
            statusDialog.dismiss();
        }
    
    }
    

    第三步: 现在,您可以根据需要更改该类,也可以使用该类发送多封邮件。我同时提供xml和java文件

    主要活动。xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:paddingTop="30dp">
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="From Email" />
    
        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:cursorVisible="true"
            android:editable="true"
            android:ems="10"
            android:enabled="true"
            android:inputType="textEmailAddress"
            android:padding="5dp"
            android:textColor="#000000">
    
            <requestFocus />
        </EditText>
    
        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="Password (For from email)" />
    
        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FFFFFF"
            android:ems="10"
            android:inputType="textPassword"
            android:padding="5dp"
            android:textColor="#000000" />
    
        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="To Email" />
    
        <EditText
            android:id="@+id/editText3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:ems="10"
            android:inputType="textEmailAddress"
            android:padding="5dp"
            android:textColor="#000000" />
    
        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="Subject" />
    
        <EditText
            android:id="@+id/editText4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:ems="10"
            android:padding="5dp"
            android:textColor="#000000" />
    
        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="10dp"
            android:text="Body" />
    
        <EditText
            android:id="@+id/editText5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffffff"
            android:ems="10"
            android:inputType="textMultiLine"
            android:padding="35dp"
            android:textColor="#000000" />
    
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Send Email" />
    
    </LinearLayout>
    

    发送邮件活动。java

    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.util.Arrays;
    import java.util.List;
    
    public class SendMailActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final Button send = (Button) this.findViewById(R.id.button1);
    
            send.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View v) {
                    Log.i("SendMailActivity", "Send Button Clicked.");
    
                    String fromEmail = ((TextView) findViewById(R.id.editText1))
                            .getText().toString();
                    String fromPassword = ((TextView) findViewById(R.id.editText2))
                            .getText().toString();
                    String toEmails = ((TextView) findViewById(R.id.editText3))
                            .getText().toString();
                    List<String> toEmailList = Arrays.asList(toEmails
                            .split("\\s*,\\s*"));
                    Log.i("SendMailActivity", "To List: " + toEmailList);
                    String emailSubject = ((TextView) findViewById(R.id.editText4))
                            .getText().toString();
                    String emailBody = ((TextView) findViewById(R.id.editText5))
                            .getText().toString();
                    new SendMailTask(SendMailActivity.this).execute(fromEmail,
                            fromPassword, toEmailList, emailSubject, emailBody);
                }
            });
        }
    }
    

    注意别忘了在您的AndroidManifest中添加互联网权限。xml文件

    <uses-permission android:name="android.permission.INTERNET"/>

    希望它的工作,如果不是那么只是评论下面

  4. # 4 楼答案

    为了帮助那些在主线程上获得网络异常的人,SDK目标>;9.这是使用上面droopie的代码,但对任何应用程序都会起到类似的作用

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    
    StrictMode.setThreadPolicy(policy); 
    
    android.os.NetworkOnMainThreadException
    

    您可以使用AsyncTask,如下所示

    public void onClickMail(View view) {
        new SendEmailAsyncTask().execute();
    }
    
    class SendEmailAsyncTask extends AsyncTask <Void, Void, Boolean> {
        Mail m = new Mail("from@gmail.com", "my password");
    
        public SendEmailAsyncTask() {
            if (BuildConfig.DEBUG) Log.v(SendEmailAsyncTask.class.getName(), "SendEmailAsyncTask()");
            String[] toArr = { "to mail@gmail.com"};
            m.setTo(toArr);
            m.setFrom("from mail@gmail.com");
            m.setSubject("Email from Android");
            m.setBody("body.");
        }
    
        @Override
        protected Boolean doInBackground(Void... params) {
            if (BuildConfig.DEBUG) Log.v(SendEmailAsyncTask.class.getName(), "doInBackground()");
            try {
                m.send();
                return true;
            } catch (AuthenticationFailedException e) {
                Log.e(SendEmailAsyncTask.class.getName(), "Bad account details");
                e.printStackTrace();
                return false;
            } catch (MessagingException e) {
                Log.e(SendEmailAsyncTask.class.getName(), m.getTo(null) + "failed");
                e.printStackTrace();
                return false;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
  5. # 5 楼答案

    Could not connect to SMTP host: smtp.gmail.com, port: 465

    在清单中添加此行:

    <uses-permission android:name="android.permission.INTERNET" />
    
  6. # 6 楼答案

    使用Gmail身份验证,使用JavaMail API在Android中发送电子邮件

    创建示例项目的步骤:

    邮件发送活动。java:

    public class MailSenderActivity extends Activity {
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            final Button send = (Button) this.findViewById(R.id.send);
            send.setOnClickListener(new View.OnClickListener() {
                
                public void onClick(View v) {
                    try {   
                        GMailSender sender = new GMailSender("username@gmail.com", "password");
                        sender.sendMail("This is Subject",   
                                "This is Body",   
                                "user@gmail.com",   
                                "user@yahoo.com");   
                    } catch (Exception e) {   
                        Log.e("SendMail", e.getMessage(), e);   
                    } 
                    
                }
            });
            
        }
    }
    

    GMailSender。java:

    public class GMailSender extends javax.mail.Authenticator {   
        private String mailhost = "smtp.gmail.com";   
        private String user;   
        private String password;   
        private Session session;   
      
        static {   
            Security.addProvider(new com.provider.JSSEProvider());   
        }  
      
        public GMailSender(String user, String password) {   
            this.user = user;   
            this.password = password;   
      
            Properties props = new Properties();   
            props.setProperty("mail.transport.protocol", "smtp");   
            props.setProperty("mail.host", mailhost);   
            props.put("mail.smtp.auth", "true");   
            props.put("mail.smtp.port", "465");   
            props.put("mail.smtp.socketFactory.port", "465");   
            props.put("mail.smtp.socketFactory.class",   
                    "javax.net.ssl.SSLSocketFactory");   
            props.put("mail.smtp.socketFactory.fallback", "false");   
            props.setProperty("mail.smtp.quitwait", "false");   
      
            session = Session.getDefaultInstance(props, this);   
        }   
      
        protected PasswordAuthentication getPasswordAuthentication() {   
            return new PasswordAuthentication(user, password);   
        }   
      
        public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {   
            try{
            MimeMessage message = new MimeMessage(session);   
            DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));   
            message.setSender(new InternetAddress(sender));   
            message.setSubject(subject);   
            message.setDataHandler(handler);   
            if (recipients.indexOf(',') > 0)   
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));   
            else  
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));   
            Transport.send(message);   
            }catch(Exception e){
                
            }
        }   
      
        public class ByteArrayDataSource implements DataSource {   
            private byte[] data;   
            private String type;   
      
            public ByteArrayDataSource(byte[] data, String type) {   
                super();   
                this.data = data;   
                this.type = type;   
            }   
      
            public ByteArrayDataSource(byte[] data) {   
                super();   
                this.data = data;   
            }   
      
            public void setType(String type) {   
                this.type = type;   
            }   
      
            public String getContentType() {   
                if (type == null)   
                    return "application/octet-stream";   
                else  
                    return type;   
            }   
      
            public InputStream getInputStream() throws IOException {   
                return new ByteArrayInputStream(data);   
            }   
      
            public String getName() {   
                return "ByteArrayDataSource";   
            }   
      
            public OutputStream getOutputStream() throws IOException {   
                throw new IOException("Not Supported");   
            }   
        }   
    }  
    

    JSSEProvider。java:

    /*
     *  Licensed to the Apache Software Foundation (ASF) under one or more
     *  contributor license agreements.  See the NOTICE file distributed with
     *  this work for additional information regarding copyright ownership.
     *  The ASF licenses this file to You under the Apache License, Version 2.0
     *  (the "License"); you may not use this file except in compliance with
     *  the License.  You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     *  Unless required by applicable law or agreed to in writing, software
     *  distributed under the License is distributed on an "AS IS" BASIS,
     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     *  See the License for the specific language governing permissions and
     *  limitations under the License.
     */
    
    /**
     * @author Alexander Y. Kleymenov
     * @version $Revision$
     */
    
    
    import java.security.AccessController;
    import java.security.Provider;
    
    public final class JSSEProvider extends Provider {
    
        public JSSEProvider() {
            super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
            AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
                public Void run() {
                    put("SSLContext.TLS",
                            "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
                    put("Alg.Alias.SSLContext.TLSv1", "TLS");
                    put("KeyManagerFactory.X509",
                            "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
                    put("TrustManagerFactory.X509",
                            "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
                    return null;
                }
            });
        }
    }
    

    将以下链接中的3个JAR添加到您的Android项目中

    Click here - How to add External Jars

    别忘了在您的清单中添加这一行:

    <uses-permission android:name="android.permission.INTERNET" />
    

    只需单击下面的链接即可更改安全性较差的应用程序的帐户访问权限 https://www.google.com/settings/security/lesssecureapps

    运行项目并检查收件人邮件帐户中的邮件。 干杯

    另外,别忘了,你不能在安卓系统的任何活动中进行网络操作。 因此,建议使用AsyncTaskIntentService来避免主线程上的网络异常

    Jar文件:https://code.google.com/archive/p/javamail-android/