문제

추가 세 jar 파일을 자바를 구축 경로를 추가 인터넷에서 사용하는 권한 모든 살고 있고 갈 수 있습니다.!내가 반짝반짝 버튼이 나의 기본 페이지,언제 내가 이 버튼을 클릭하여 의도를 이 java 클래스 메일을 작업,그리고 이메일을 보내에 해당 사용자.하지만 내가 버튼을 클릭하여 갑자기 나타 그전의 작동이 중지..!!하나는 내가 사용하는 모든 레이아웃을 위해 이 자바 메일 클래스입니다.다는 것을 이해 당신이 볼 때 아래 코드입니다.그것이 원인이고 싶은 메시지를 보내 자동으로 합니다.!!무엇을 할 수 있습니다.??나를 도울 사람이다.??감사합니다.!!

package;


import java.util.Date; 
import android.content.Intent;
import java.util.Properties; 
import javax.activation.CommandMap; 
import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
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; 


public class Mail extends javax.mail.Authenticator { 


  private String _user;
  private String _pass;

 private String to1,to2,to3,to4,to5; // here i putted my recepients name
  private String[] _to = {to1,to2,to3,to4,to5}; 
  private String _from; 

  private String _port; 
  private String _sport; 

  private String _host; 

  private String _subject = "HELLO";
  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 



    _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); 

      MimeMessage msg = new MimeMessage(session); 

      msg.setFrom(new InternetAddress(_from)); 

      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.send(msg); 

      return true; 
    } else { 
      return false; 
    } 
  } 

  public void addAttachment(String filename) throws Exception { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 

    _multipart.addBodyPart(messageBodyPart); 
  } 

  @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; 
  } 

  // more of the getters and setters ….. 
} 
도움이 되었습니까?

해결책

해야 합 게시 코드를 호출하는 이 클래스(능성 Activity).거기에 몇 가지 일반적인 문제를 일으킬 수 있는 이처럼 NetworkOnMainThreadException.

내가 쓴 일부 작업 안드로이드 메일드에서 동일한 javax.mail 코드,그리고 그것이 제대로 작동합니다.여기에는 코드:

    submitButton.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v) {

            /*
             * Send email in a background thread
             */
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {

                    // retrieve the configuration values from preferences
                    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(theActivity);
                    String destinationAddress = preferences.getString("email_destination_address", theActivity.getString(R.string.default_email_destination_address));
                    String senderAddress = preferences.getString("email_from", theActivity.getString(R.string.default_email_sender_address));
                    String senderPassword = preferences.getString("email_password", theActivity.getString(R.string.default_email_sender_password));
                    String smtpServer = preferences.getString("email_server", theActivity.getString(R.string.default_smtp_server));

                    Mail m = new Mail(senderAddress, senderPassword);

                    String[] toArr = { destinationAddress };
                    m.setHost(smtpServer);
                    m.setTo(toArr);
                    m.setFrom(EMAIL_USERNAME);
                    m.setSubject(getString(R.string.email_subject, barcode));
                    m.setBody(getString(R.string.email_body));

                    try {
                        ArrayList<String> filesToSend = theAdapter.getFilenames();

                        for (String file : filesToSend)
                        {
                            m.addAttachment(file);
                        }

                        if (m.send()) {
                            Log.d(TAG, "EMAIL SENT SUCCESSFULLY");
                        } else {
                            Log.w(TAG, "EMAIL NOT SENT");
                        }
                    } catch (Exception e) {
                        Log.e(TAG, "Could not send email", e);
                    }

                }
            });
            t.start();
            Toast.makeText(getApplicationContext(), getString(R.string.email_sending), Toast.LENGTH_LONG).show();

            theActivity.onBackPressed();
        }
    });

참고:만약 내가 이것을 쓰는 코드는 오늘 제가 사용할 수 있는 AsyncTask 대신 실지만,하나는 유효한 것으로 간주됩니다.

다른 팁

getters 및 setter에 대한 나머지 코드가 누락되었습니다. 코드 하단의 주석을보십시오 :

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

해당 설명 대신 다음을 추가해야합니다.

/**
 * METHOD TO SET THE "TO" STRING ARRAY
 * @param toArr
 */
public void setTo(String[] toArr) {
    this._to = toArr;
}

/**
 * METHOD TO GET THE "TO" STRING ARRAY
 * @return
 */
public String[] getTo() {
    return _to;
} 

/**
 * METHOD TO SET THE "FROM" FIELD FOR THE MESSAGE
 * @param string
 */
public void setFrom(String string) {
    this._from = string;
}

/**
 * METHOD TO GET THE "FROM" FIELD FOR THE MESSAGE
 * @return
 */
public String getFrom() {
    return _from;
} 

/**
 * METHOD TO SET THE MESSAGE SUBJECT
 * @param string
 */
public void setSubject(String string) {
    this._subject = string;
} 

/**
 * METHOD TO GET THE MESSAGE SUBJECT
 * @return
 */
public String getSubject() {
    return _subject;
} 
.

이것은 작동해야합니다. 다음 장애물은 NetworkOnMaintHreadException 에 대해 아래에서 언급하는 것입니다. 이것은이 "nofollow"> 게시물을 사용하여 수정할 수 있습니다 strictMode를 확인하지만 더 나은 옵션은 Asynctask 에서 설명한대로 사용하는 것입니다. 게시

[편집] 나는 또한 Proguard에 문제가 있었다! 위의 작업 중 어느 것도 작동하지 않으면 Proguard가 작동하지 않는지 확인하십시오.

희망이 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top