java发邮件api,无法使用JavaMail API发送邮件

I'm trying to sned a mail using the below code :-

java.awt.EventQueue.invokeLater(

new Runnable() {

@Override

public void run() {

new SwingWorker() {

String to = "xx@gmail.com";

// Sender's email ID needs to be mentioned

String from = "xexx@gmail.com";

// Assuming you are sending email from localhost

String host = "localhost";

// Get system properties

// Properties properties = System.getProperties();

// Setup mail server

protected Void doInBackground() throws Exception {

try {

Properties properties = new Properties();

properties.put("mail.smtp.socketFactory.port", "465");

properties.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

properties.put("mail.smtp.starttls.enable", "true");

// Get the default Session object.

Session session = Session.getDefaultInstance(properties);

// 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!");

// Now set the actual message

message.setText("Message" + jTextField1.getText() + " xx " + jTextField2.getText());

// Send message

Transport.send(message);

} catch (Exception x) {

x.printStackTrace();

}

return null;

}

protected void process() {

}

protected void done() {

try {

JOptionPane.showMessageDialog(null, "You'll get a response from our team shortly !");

} catch (Exception x) {

}

}

}.execute();

}

On call of the above code i'm getting an Exception :

javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;

nested exception is:

java.net.SocketException: Permission denied: connect

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)

at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)

at javax.mail.Service.connect(Service.java:295)

at javax.mail.Service.connect(Service.java:176)

at javax.mail.Service.connect(Service.java:125)

at javax.mail.Transport.send0(Transport.java:194)

at javax.mail.Transport.send(Transport.java:124)

at ims.Activation$5$1.doInBackground(Activation.java:374)

at ims.Activation$5$1.doInBackground(Activation.java:327)

at javax.swing.SwingWorker$1.call(SwingWorker.java:296)

at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

at java.util.concurrent.FutureTask.run(FutureTask.java:166)

at javax.swing.SwingWorker.run(SwingWorker.java:335)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

at java.lang.Thread.run(Thread.java:722)

Caused by: java.net.SocketException: Permission denied: connect

at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)

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:157)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)

at java.net.Socket.connect(Socket.java:579)

at java.net.Socket.connect(Socket.java:528)

at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)

at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)

at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)

... 15 more

How can i resolve this?

解决方案

Unless you are running a mail server on your local environment, then you are going to need to specify one via additional mail properties:

properties.put("mail.smtp.host", aHost);

As an example, if you were using the Gmail relay, you would have:

properties.put("mail.smtp.host", "smtp.gmail.com");

In addition you need the mail.smtp.auth property setup for the session.

properties.put("mail.smtp.auth", true);

Depending on which host you end up using, you will probably also need to supply authentication information. For example, again with the Gmail relay:

Session session = Session.getDefaultInstance(props,

new javax.mail.Authenticator() {

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication("someUserName", "somePassword");

}

}

);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值