如何解决android

时间:2015-05-29 03:50:42

标签: android smtp mailing

我希望向一组具有单独内容的人发送电子邮件(有特殊内容的人)。

我使用计时器,因为我有一个进度条。这是我的代码:

          ..............
          ..............
          timer.schedule(new TimerTask() {
        @Override
        public void run() {
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {

                    if (progress.getProgress() == 100){
                        timer.cancel();

                        closeBtn.setVisibility(View.VISIBLE);
                    }
                        int current_index = 1;
                        for (String sid : SID) {




                            String html = ReportGenerator.getHtmlContent( current_index );



                            if (email) {

                                String rec_email[] = new String[1];
                                rec_email[0] = emailList.get( current_index );
                                mail.setSubject(ctx.getString(R.string.ReportDialog_email));
                                mail.setTo(rec_email);
                                mail.setFrom(FROM);
                                mail.setBody(html);

                                try {
                                    boolean i = mail.send();
                                    if (i) {


                                        Toast.makeText(ctx, "Email was sent successfully ", Toast.LENGTH_LONG).show();


                                    } else {


                                        Toast.makeText(ctx, "Email was not sent successfully ", Toast.LENGTH_LONG).show();


                                    }
                                } catch (Exception e2) {
                                    // TODO Auto-generated catch block
                                    e2.printStackTrace();
                                }
                            }


                                progress.setProgress(Math.round((current_index / SID.size()) * 100));



                                current_index += 1;


                        }

                }
            });
        }
    }, 1000, 100);
    ................

电子邮件发送成功,但一遍又一遍(无限循环),直到程序因强制关闭(强行关闭)

这是我的smtp课程:

       package com.example.habib.share;

     import java.io.ByteArrayInputStream;
     import java.io.IOException;
     import java.io.InputStream;
     import java.io.OutputStream;
     import java.util.Date;
     import java.util.Properties;
     import javax.activation.CommandMap;
     import javax.activation.DataHandler;
     import javax.activation.DataSource;
     import javax.activation.MailcapCommandMap;
     import javax.mail.BodyPart;
     import javax.mail.Multipart;
     import javax.mail.PasswordAuthentication;
     import javax.mail.Session;
     import javax.mail.Transport;
     import javax.mail.internet.InternetAddress;
     import javax.mail.internet.MimeBodyPart;
     import javax.mail.internet.MimeMessage;
     import javax.mail.internet.MimeMultipart;

     import android.util.Log;


     public class Mail extends javax.mail.Authenticator {
private String _user;
private String _pass;

private String[] _to;
private String _from;

private String _port;
private String _sport;

private String _host;

private String _subject;
private String _body;

private boolean _auth;

private boolean _debuggable;

private Multipart _multipart;


public Mail() {
    _host = "smtp.gmail.com"; // default smtp server
    _port = "465"; // default smtp port
    _sport = "465"; // default socketfactory port

    _user = ""; // username
    _pass = ""; // password
    _from = ""; // email sent from
    _subject = ""; // email subject
    _body = ""; // email body

    _debuggable = false; // debug mode on or off - default off
    _auth = true; // smtp authentication - default on

    _multipart = new MimeMultipart();

    // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
    MailcapCommandMap mc = (MailcapCommandMap)          CommandMap.getDefaultCommandMap();
    mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
    mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
    mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
    mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
    mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
    CommandMap.setDefaultCommandMap(mc);
}

public Mail(String user, String pass) {
    this();

    _user = user;
    _pass = pass;
}

public boolean send() throws Exception {
    Properties props = _setProperties();

    if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {

        Session session = Session.getInstance(props, this);
        DataHandler handler = new DataHandler(new ByteArrayDataSource(_body.getBytes(), "text/html"));
        MimeMessage msg = new MimeMessage(session);

        msg.setFrom(new InternetAddress(_from));
        msg.setDataHandler(handler);
        InternetAddress[] addressTo = new InternetAddress[_to.length];
        for (int i = 0; i < _to.length; i++) {
            addressTo[i] = new InternetAddress(_to[i]);
        }
        msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);

        msg.setSubject(_subject);
        msg.setSentDate(new Date());

        // setup message body
        BodyPart messageBodyPart = new MimeBodyPart();
        messageBodyPart.setText(_body);
        _multipart.addBodyPart(messageBodyPart);

        // Put parts in message
        msg.setContent(_multipart);

        // send email
       Transport transport = session.getTransport("smtps");

        Transport.send(msg);
        Log.v("mas", "Email was  send");
        return true;
    } else {
        Log.v("mas", "Email was  not send");
        return false;

    }
}
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");
    }
}

@Override
public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(_user, _pass);
}

private Properties _setProperties() {
    Properties props = new Properties();

    props.put("mail.smtp.host", _host);

    if(_debuggable) {
        props.put("mail.debug", "true");
    }

    if(_auth) {
        props.put("mail.smtp.auth", "true");
    }

    props.put("mail.smtp.port", _port);
    props.put("mail.smtp.socketFactory.port", _sport);
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");

    return props;
}

// the getters and setters
public String getBody() {
    return _body;
}

public void setBody(String _body) {
    this._body = _body;
}

public void setTo(String[] toArr) {
    // TODO Auto-generated method stub
    this._to=toArr;
}

public void setFrom(String string) {
    // TODO Auto-generated method stub
    this._from=string;
}

public void setSubject(String string) {
    // TODO Auto-generated method stub
    this._subject=string;
}

// more of the getters and setters …..
  }

通知:每个人的电子邮件正文都已更改。所以我无法使用:

      String rec_email[] = {"email1","email2" , ....};

并使用一次sendMail函数,因为在这种情况下会向所有人发送相同的内容。

问题在哪里? 请帮帮我。

0 个答案:

没有答案