3

我编写了一个通过 SMTP 发送邮件的代码,邮件是从 android ICS 设备发送的,但从 Gingerbread 设备发送的邮件没有发送。任何人都可以通过代码并帮助我...

首先,我调用 GMailOauthSender 类的 sendmail() 方法。

class GMailOauthSender {

    private Session session;

    public SMTPTransport connectToSmtp(String host, int port,
            String userEmail, String oauthToken, boolean debug)
            throws Exception {

        Properties props = new Properties();
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.starttls.required", "true");
        props.put("mail.smtp.sasl.enable", "false");
        session = Session.getInstance(props);
        session.setDebug(debug);

        final URLName unusedUrlName = null;
        SMTPTransport transport = new SMTPTransport(session, unusedUrlName);
        // If the password is non-null, SMTP tries to do AUTH LOGIN.
        final String emptyPassword = null;
        transport.connect(host, port, userEmail, emptyPassword);

        byte[] response = String.format("user=%s\1auth=Bearer %s\1\1",
                userEmail, oauthToken).getBytes();
        response = BASE64EncoderStream.encode(response);

        transport.issueCommand("AUTH XOAUTH2 " + new String(response), 235);

        return transport;
    }

    public synchronized void sendMail(String subject, String body,
            String user, String oauthToken, String recipients, String cc) {
        try {
            spinner = ProgressDialog.show(FeedbackActivity.this, "",
                    getResources().getString(R.string.sending_mail), false, true);
            new SendMailTask().execute(subject, body, user, oauthToken,
                    recipients, cc);

        } catch (Exception e) {
            Log.d("exception inside send mail method", e.toString());
        }

    }

    class SendMailTask extends AsyncTask<Object, Object, Object> {

        @Override
        protected Object doInBackground(Object... params) {
            String subject = (String) params[0];
            String body = (String) params[1];
            String user = (String) params[2];
            String oauthToken = (String) params[3];
            String recipients = (String) params[4];
            String cc = (String) params[5];
            try {
                SMTPTransport smtpTransport = connectToSmtp(
                        "smtp.gmail.com", 587, user, oauthToken, false);
                for(int i = 0; i< attachedFiles.size(); i++){
                    File file = new File(attachedFiles.get(i).getFilePath());
                    addAttachment(multipart, file);
                }
                MimeMessage message = new MimeMessage(session);
                message.setSender(new InternetAddress(user));
                message.setSubject(subject);

                MimeBodyPart mbp1 = new MimeBodyPart();
                mbp1.setText(body + "\nThanks\n"+user+"\n\n"+getResources().getString(R.string.signature_text));
                multipart.addBodyPart(mbp1);


                message.setContent(multipart);
                if (recipients.indexOf(',') > 0){
                    message.setRecipients(Message.RecipientType.TO,
                            InternetAddress.parse(recipients));
                }else{
                    message.setRecipient(Message.RecipientType.TO,
                            new InternetAddress(recipients));
                }
                if(cc != null && cc.length() >0){
                    if (cc.indexOf(',') > 0){
                        message.addRecipients(Message.RecipientType.CC,
                                InternetAddress.parse(cc));
                    }else{
                        message.addRecipient(Message.RecipientType.CC,
                                new InternetAddress(cc));
                    }   

                }
                smtpTransport.sendMessage(message,
                        message.getAllRecipients());
                spinner.dismiss();
                finish();
                return new Object[] { smtpTransport, message };
            } catch (Exception e) {
                spinner.dismiss();
                finish();

            }
            return null;
        }

        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);

            if(result != null){
            Toast.makeText(FeedbackActivity.this, getResources().getString(R.string.mail_sent), Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(FeedbackActivity.this, getResources().getString(R.string.mail_not_sent), Toast.LENGTH_LONG).show();  
            }
        }
    }
}
4

0 回答 0