使用 java 和 gmail 发送邮件

2023-10-13Java开发问题
6

本文介绍了使用 java 和 gmail 发送邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I wanto to send a e-mail with an calendar attachment javaxmail and I created this class:

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

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

It seems ok, but, when I try to send, the console shows this error:

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

有人可以帮助我吗?提前致谢!!

Can someone help me? Thanks in advance!!

推荐答案

使用下面的代码.

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("<Gmail User Name>", "<Gmail Password>");  
            }  
        });  


        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 电子邮件地址以及 and.

Replace all the from and to email addresses and the and in the above code.

这篇关于使用 java 和 gmail 发送邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

如何使用 JAVA 向 COM PORT 发送数据?
How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)...
2024-08-25 Java开发问题
21

如何使报表页面方向更改为“rtl"?
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)...
2024-08-25 Java开发问题
19

在 Eclipse 项目中使用西里尔文 .properties 文件
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)...
2024-08-25 Java开发问题
18

有没有办法在 Java 中检测 RTL 语言?
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)...
2024-08-25 Java开发问题
11

如何在 Java 中从 DB 加载资源包消息?
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)...
2024-08-25 Java开发问题
13

如何更改 Java 中的默认语言环境设置以使其保持一致?
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)...
2024-08-25 Java开发问题
13