2014-06-19 72 views
0

我正在開發一個監控程序,它會定期發送郵件。 每件事情都很好,直到我試圖使它成爲一個可運行的jar。 郵件部分在eclipse中正常工作,我可以發送電子郵件。但是,只要我使它成爲可運行的jar,程序就不會發送電子郵件。Java郵件可運行jar無法運行

我在做什麼錯?

package mailing; 
import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.activation.*; 
public class TestEmail 
{ 
void addRecipients(Message.RecipientType type, Address[] addresses)throws MessagingException 
    { 

    } 
public static void main(String [] args) throws Exception 
    { 
     final int port = 465; 
     final String host = "smtp.gmail.com"; 
     final String from = "*****@gmail.com"; 
     final String to = "********@gmail.com"; 
     boolean auth = true; 
     final String username = "*******@gmail.com"; 
     final String password = "**********"; 

    boolean debug = true; 

    Properties props = new Properties(); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.port", port); 
    props.put("mail.transport.protocol", "smtp"); 
    props.put("mail.smtp.host","smtp.gmail.com"); 

    props.put("mail.smtp.socketFactory.port","465"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth","true"); 
    props.put("mail.smtp.port","465"); 

    Authenticator authenticator = null; 

     props.put("mail.smtp.auth", true); 
     authenticator = new Authenticator() { 
      PasswordAuthentication pa = new PasswordAuthentication(username, password); 
      @Override 
      public PasswordAuthentication getPasswordAuthentication() { 
       return pa; 
      } 

     }; 

    Session session = Session.getInstance(props, authenticator); 
    session.setDebug(debug); 


    MimeMessage message = new MimeMessage(session); 

     message.setFrom(new InternetAddress(from)); 
     InternetAddress[] address = {new InternetAddress(to.toString())}; 
     message.setRecipients(Message.RecipientType.TO, address); 
     String subject="- Job Alert -"; 
     message.setSubject(subject); 
     message.setSentDate(new Date()); 
     String body="Hello you got a new mail"; 
     message.setText(body); 
     Transport.send(message); 

    } 


} 

這是從eclipse運行時的eclipse控制檯。 注意:最後關閉連接。 此代碼發送電子郵件。

DEBUG: setDebug: JavaMail version 1.4.2 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false 
220 mx.google.com ESMTP fk4sm25070066pab.23 - gsmtp 
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465 

EHLO jason-DesktopPC1 
250-mx.google.com at your service, [49.204.224.235] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN 
250-ENHANCEDSTATUSCODES 
250 CHUNKING 
DEBUG SMTP: Found extension "SIZE", arg "35882577" 
DEBUG SMTP: Found extension "8BITMIME", arg "" 
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN" 
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
DEBUG SMTP: Found extension "CHUNKING", arg "" 
DEBUG SMTP: Attempt to authenticate 
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN 
334 VXNlcm5hbWU6 
Y2hlcnkwMTJAZ21haWwuY29t 
334 UGFzc3dvcmQ6 
VGFuaXRhbmkwMTI= 
235 2.7.0 Accepted 
DEBUG SMTP: use8bit false 
MAIL FROM:<[email protected]> 
250 2.1.0 OK fk4sm25070066pab.23 - gsmtp 
RCPT TO:<[email protected]> 
250 2.1.5 OK fk4sm25070066pab.23 - gsmtp 
DEBUG SMTP: Verified Addresses 
DEBUG SMTP: [email protected] 
DATA 
354 Go ahead fk4sm25070066pab.23 - gsmtp 
Date: Thu, 19 Jun 2014 16:17:57 +0530 (IST) 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: - Job Alert - 
MIME-Version: 1.0 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

Hello you got a new mail 
. 
250 2.0.0 OK 1403174885 fk4sm25070066pab.23 - gsmtp 
QUIT 
221 2.0.0 closing connection fk4sm25070066pab.23 - gsmtp 

此使用> Java的罐子EmailTest.jar 通知是從Win7的CMD:程序從來不退出。沒有關閉連接。 這個罐子不發送電子郵件。

DEBUG: setDebug: JavaMail version 1.4ea 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: useEhlo true, useAuth true 
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false 
220 mx.google.com ESMTP ih6sm8024528pbc.22 - gsmtp 
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465 

EHLO jason-DesktopPC1 
250-mx.google.com at your service, [49.204.224.235] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN 
250-ENHANCEDSTATUSCODES 
250 CHUNKING 
DEBUG SMTP: Found extension "SIZE", arg "35882577" 
DEBUG SMTP: Found extension "8BITMIME", arg "" 
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN" 
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
DEBUG SMTP: Found extension "CHUNKING", arg "" 
DEBUG SMTP: Attempt to authenticate 
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 
AUTH LOGIN 
334 VXNlcm5hbWU6 
Y2hlcnkwMTJAZ21haWwuY29t 
334 UGFzc3dvcmQ6 
VGFuaXRhbmkwMTI= 
235 2.7.0 Accepted 
DEBUG SMTP: use8bit false 
MAIL FROM:<[email protected]> 
250 2.1.0 OK ih6sm8024528pbc.22 - gsmtp 
RCPT TO:<[email protected]> 
250 2.1.5 OK ih6sm8024528pbc.22 - gsmtp 
DEBUG SMTP: Verified Addresses 
DEBUG SMTP: [email protected] 
DATA 
354 Go ahead ih6sm8024528pbc.22 - gsmtp 
Date: Thu, 19 Jun 2014 16:30:51 +0530 (IST) 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: - Job Alert - 
MIME-Version: 1.0 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

Hello you got a new mailQUIT 
+1

幫自己一個忙 - 刪除您的文章EMAILADDRESS密碼組合。 – Stultuske

+0

...並更改密碼asap –

+0

謝謝你們倆。很分心沒有注意到。 – avinandan012

回答

0

我不知道這是否會工作,只是嘗試代碼:

public boolean sendMail(final String senderEmail, final String password, String recipientEmail, String ccEmail, String bccEmail) { 

    Properties props = System.getProperties(); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "25"); 

    Session session = Session.getInstance(props, null); 

    try { 

     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(senderEmail)); 
     message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail)); 
     if (ccEmail.length() > 0) { 
      message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail)); 
     } 
     if(bccEmail.length() > 0){ 
      message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(bccEmail)); 
     } 
     message.setSubject(this.subject); 
     message.setSentDate(new Date()); 
     message.setText(this.textMessage, "utf-8"); 

     SMTPTransport t = (SMTPTransport) session.getTransport("smtps"); 

     t.connect("smtp.gmail.com", senderEmail, password); 
     t.sendMessage(message, message.getAllRecipients()); 
     t.close(); 

     System.out.println("Message sent successfully to '" + recipientEmail + "; " + ccEmail + "'."); 

     return true; 
    } catch (MessagingException e) { 
     System.out.println("Message not sent to '" + recipientEmail + "; " + ccEmail + "'."); 
     e.printStackTrace(); 
     return false; 
    } 
} 
+0

你使用com.sun.mail.smtp.SMTPTransport類嗎?此代碼在IDE中也可用,但在打包爲可運行jar時引發異常 – avinandan012

+0

是的,我正在使用[JavaMail API](http://www.oracle.com/technetwork/java/javamail/index.html?ssSourceSiteId=otncn) –

+0

C:\ Users \ jason \ Desktop> java -jar EmailTest1.jar 線程「main」中的異常java.lang.NoSuchFieldError:atBOL at com.sun.mail.smtp.SMTPOutputStream.ensureAtBOL(SMTPOutputStream.java:107) at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1472) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:738) at mailing.TestEmail.sendMail(TestEmail。 java:49) at mail.TestEmail.main(TestEmail.java:68) – avinandan012