0

我正在使用 Windows 8 x86 和 jdk_7。下面的代码编译得很好,没有错误。当我运行时,它给了我这个例外:

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
   nested exception is:
java.net.SocketException: Permission denied: connect

现在作为一种解决方法,我尝试添加这一行:

System.setProperty("java.net.preferIPv4Stack", "true");

这并没有解决问题,经过数小时的互联网研究,我注意到问题出在 jdk_7 和防火墙问题上。我什至尝试过这个命令

netsh advfirewall set global StatefulFTP disable

这也不能解决问题。

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail
{
  public static void main(String [] args)
  {
     System.setProperty("java.net.preferIPv4Stack", "true");
  // Recipient's email ID needs to be mentioned.
     String to = "tmadile@gmail.com";

  // Sender's email ID needs to be mentioned
     String from = "hareitse@gmail.com";

  // Assuming you are sending email from localhost
     String host = "localhost";

  // Get system properties
     Properties properties = System.getProperties();

  // Setup mail server
     properties.setProperty("mail.smtp.host", host);

  // Get the default Session object.
     Session session = Session.getDefaultInstance(properties);

     try{
     // Create a default MimeMessage object.
        MimeMessage message = new MimeMessage(session);

     // Set From: header field of the header.
        message.setFrom(new InternetAddress(from));

     // Set To: header field of the header.
        message.addRecipient(Message.RecipientType.TO,
                              new InternetAddress(to));

     // Set Subject: header field
        message.setSubject("This is the Subject Line!");

     // Create the message part 
        BodyPart messageBodyPart = new MimeBodyPart();

     // Fill the message
        messageBodyPart.setText("This is message body");

     // Create a multipar message
        Multipart multipart = new MimeMultipart();

     // Set text message part
        multipart.addBodyPart(messageBodyPart);

     // Part two is attachment
        messageBodyPart = new MimeBodyPart();
        String filename = "shh.jpg";
        DataSource source = new FileDataSource(filename);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(filename);
        multipart.addBodyPart(messageBodyPart);

     // Send the complete message parts
        message.setContent(multipart );

     // Send message
        Transport.send(message);
        System.out.println("Sent message successfully....");
     }
        catch (MessagingException mex) {
           mex.printStackTrace();
        }
  }
}
4

1 回答 1

1
// Assuming you are sending email from localhost
String host = "localhost";
// Setup mail server
properties.setProperty("mail.smtp.host", host);

我阅读您的代码和错误的方式似乎更像是您试图从 localhost 作为主机发送,实际上您是在尝试在 localhost 的 25 端口发送到邮件服务器。如果您没有任何 SMTP 服务器在本地主机上运行,​​您将收到上述错误。您提供的代码不会为您启动任何 SMTP 服务器。您可能应该将 host = "localhost" 替换为您的 smtp 主机(可能还有其他设置,具体取决于您的 smtp 提供商的需求)。

于 2013-07-29T13:34:45.990 回答