2012-09-01 29 views
2

我試着用GMailSender向右從我的應用程序發送電子郵件GMailSender不緩存任何異常,雖然沒有連接

我的片段:

公共類updateFragment擴展SherlockFragment {

public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) 
{ 
    View v = inflater.inflate(R.layout.update_layout, group, false); 





    Button buttonsubmit = (Button) v.findViewById(R.id.buttonsubmit); 
    buttonsubmit.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      try { 
       GMailSender sender = new GMailSender("[email protected]", "test"); 
       sender.sendMail("Update info", 
         "", 
         "[email protected]", "[email protected]"); 
       Toast.makeText(updateFragment.this.getActivity().getBaseContext(), "Info Submitted Successfully", Toast.LENGTH_SHORT).show(); 

      } catch (Exception e) { 
       Log.e("SendMail", e.getMessage(), e); 
       Toast.makeText(updateFragment.this.getActivity().getBaseContext(), "Please make sure that you have an internet connection", Toast.LENGTH_SHORT).show(); 
      } 




     } 

    }); 

    return v; 

} 
} 

GMailSender:

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
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; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.security.Security; 
import java.util.Properties; 

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

它的工作正常,但如果有沒有連接,它會看起來像工作正常,我的意思是說,祝酒會說「信息提交成功」,爲什麼不是它造成或捕捉異常?

在此先感謝

回答

2

這是發生,因爲 GMailSender.sendMail已經捕捉異常。刪除GMailSender.sendMail內的try catch塊,你會得到異常。

+0

完美! :)做到了 –