用java和gmail发送邮件

我想发送带有日历附件javaxmail的电子邮件,我创建了这个类:

public void sendEmail(String to, Calendar calendar) { try { String d_uname = "myaccount@gmail.com"; String d_password = "mypassword"; String d_host = "smtp.gmail.com"; String d_port = "587";//465,587 String from = "antonitocea@gmail.com"; String subject = "Subject"; String bodyText = "Body"; Properties prop = new Properties(); //prop.setProperty("mail.smtp.auth", "true"); prop.setProperty("mail.smtp.host", "smtp.gmail.com"); prop.setProperty("mail.smtp.protocol", "smtps"); prop.setProperty("mail.smtp.starttls.enable", "true"); prop.setProperty("mail.smtp.ssl.enable", "true"); prop.setProperty("mail.smtp.port",d_port); prop.setProperty("mail.smtp.user", d_uname); Session session = Session.getDefaultInstance(prop, null); // Define message session.setDebug(true); MimeMessage message = new MimeMessage(session); message.addHeaderLine("method=REQUEST"); message.addHeaderLine("charset=UTF-8"); message.addHeaderLine("component=VEVENT"); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("Outlook Meeting Request Using JavaMail"); StringBuffer sb = new StringBuffer(); StringBuffer buffer = sb.append(calendar.toString()); // Create the message part BodyPart messageBodyPart = new MimeBodyPart(); // Fill the message messageBodyPart.setHeader("Content-Class", "urn:content-classes:calendarmessage"); messageBodyPart.setHeader("Content-ID","calendar_message"); messageBodyPart.setDataHandler(new DataHandler( new ByteArrayDataSource(buffer.toString(), "text/calendar")));//very important // Create a Multipart Multipart multipart = new MimeMultipart(); // Add part one multipart.addBodyPart(messageBodyPart); Transport t = session.getTransport("smtp"); t.connect(d_host, 587, d_uname, d_password); // Put parts in message message.setContent(multipart); // send message t.send(message); } catch (MessagingException me) { me.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } } 

看起来没问题,但是,当我尝试发送时,控制台显示此错误:

 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: trying to connect to host "smtp.gmail.com", port 587, isSSL false javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587; nested exception is: java.net.SocketException: Permission denied: connect 

有人能帮我吗? 提前致谢!!

使用以下代码。

 public void sendTemplateEmail() { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.auth", "true"); props.put("mail.debug", "true"); props.put("mail.smtp.port", 25); props.put("mail.smtp.socketFactory.port", 25); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.transport.protocol", "smtp"); Session mailSession = null; mailSession = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("", ""); } }); try { Transport transport = mailSession.getTransport(); MimeMessage message = new MimeMessage(mailSession); message.setSubject("Sample Subject"); message.setFrom(new InternetAddress("Sample@sample.com")); String []to = new String[]{"Sample2gmail.com"}; message.addRecipient(Message.RecipientType.TO, new InternetAddress(to[0])); String body = "Sample text"; message.setContent(body,"text/html"); transport.connect(); transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO)); transport.close(); } catch (Exception exception) { } } 

替换所有from和to电子邮件地址以及上面的代码。