2013-12-17 77 views
0

我想用java发送电子邮件,但我不断收到IOException 任何想法我做错了什么?我认为这是一些与t.send不是Transport.send()但我似乎无法得到它的工作,我不断收到后无法连接错误.. 任何帮助,将不胜感激:)无法将MimeMultiPart附加到Transport.send()

public void Send(String recipientEmail) throws AddressException, MessagingException { 
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 
    final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 
    String title = titleBox.getText(); 
    // Get a Properties object 
    Properties props = System.getProperties(); 
    props.setProperty("mail.smtps.host", "smtp.gmail.com"); 
    props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); 
    props.setProperty("mail.smtp.socketFactory.fallback", "false"); 
    props.setProperty("mail.smtp.port", "465"); 
    props.setProperty("mail.smtp.socketFactory.port", "465"); 
    props.setProperty("mail.smtps.auth", "true"); 


    props.put("mail.smtps.quitwait", "false"); 

    Session session = Session.getInstance(props, null); 
    String ccEmail = ""; 
    // -- Create a new message -- 
    final MimeMessage msg = new MimeMessage(session); 

    // -- Set the FROM and TO fields -- 
    msg.setFrom(new InternetAddress(emailUsername + "@gmail.com")); 
    msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false)); 

    if (ccEmail.length() > 0) { 
     msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false)); 
    } 
    String message = messageBox.getText(); 
    msg.setSubject(title); 
    MimeBodyPart messagePart = new MimeBodyPart(); 
    messagePart.setText(message); 
    multipart.addBodyPart(messagePart); 
    //msg.setText(message, "utf-8"); 
    msg.setSentDate(new Date()); 
    msg.setContent(multipart); 
    SMTPTransport t = (SMTPTransport)session.getTransport("smtps"); 

    t.connect("smtp.gmail.com", emailUsername, emailPassword); 
    t.sendMessage(msg, msg.getAllRecipients()); 
    //Transport.send(msg); 
    t.close(); 
} 

我能够正确地ping通smtp.gmail.com的连接问题,我相信是由于使用Transport.send()也是这个工作之前,我开始使用的multipart因为我以前


这里是发送使用它的电子邮件堆栈tra CE

javax.mail.MessagingException: IOException while sending message; 
    nested exception is: 
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
boundary="----=_Part_0_1039039084.1386965872274" 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:676) 
at examples.ContactEditor.Send(ContactEditor.java:445) 
at examples.ContactEditor.jButton7ActionPerformed(ContactEditor.java:395) 
at examples.ContactEditor.access$400(ContactEditor.java:53) 
at examples.ContactEditor$5.actionPerformed(ContactEditor.java:249) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:708) 
at java.awt.EventQueue$4.run(EventQueue.java:706) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
Caused by: javax.activation.UnsupportedDataTypeException: no object DCH for MIME type multipart/mixed; 
boundary="----=_Part_0_1039039084.1386965872274" 
at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:891) 
at javax.activation.DataHandler.writeTo(DataHandler.java:317) 
at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1403) 
at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1745) 
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:636) 
... 40 more 

,如果我用它给了我下面的异常static Transport.send() ..

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 465; 
    nested exception is: 
java.net.ConnectException: Connection refused: connect 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1391) 
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) 
at javax.mail.Service.connect(Service.java:288) 
at javax.mail.Service.connect(Service.java:169) 
at javax.mail.Service.connect(Service.java:118) 
at javax.mail.Transport.send0(Transport.java:188) 
at javax.mail.Transport.send(Transport.java:118) 
at examples.ContactEditor.Send(ContactEditor.java:446) 
at examples.ContactEditor.jButton7ActionPerformed(ContactEditor.java:396) 
at examples.ContactEditor.access$400(ContactEditor.java:53) 
at examples.ContactEditor$5.actionPerformed(ContactEditor.java:249) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:708) 
at java.awt.EventQueue$4.run(EventQueue.java:706) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
at java.net.Socket.connect(Socket.java:579) 
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618) 
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160) 
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233) 
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:163) 
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359) 
... 46 more 

回答

0

这样看来你没有设置你的内容类型的信息。

+1

任何想法该怎么做呢? –

+0

[This answer](http://stackoverflow.com/questions/13135593/setting-content-type-for-mimemessage)应该覆盖它。 – jdhovland

0

您拨打电话之前,发送电子邮件,你可以添加:

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

查看详细看到该链接DCH class error with JavaMail

0

Java的激活框架由JavaMail的使用配置不正确,在这案件。

它不知道如何处理多部分/混合内容类型。

请参阅thisthis答案以获取更多信息。

0

此消息表明在类路径中找不到多部分/混合内容类型的DCH内容处理程序。

我不确定你是如何在你的代码示例中创建'multipart'的,但是鉴于你正在接受异常,你很可能使用了默认构造函数来解释multipart/mixed的内容类型。

您不应该静态添加邮件帽映射,如果您没有正确解决此问题,则会遇到更多问题。

我建议检查你的项目依赖关系,并确保activation.jar在你的类路径中。

如果您正在使用maven,你可以使用:

MVN依赖性:树

如果做不到这一点,你可以用下面的依赖声明激活框架添加到您的项目:

<dependency> 
    <groupId>javax.activation</groupId> 
    <artifactId>activation</artifactId> 
    <version>1.1.1</version> 
</dependency> 

摇篮依赖:

'javax.activation:activation:1.1.1'