{"id":2274,"date":"2025-03-03T23:15:40","date_gmt":"2025-03-03T15:15:40","guid":{"rendered":"https:\/\/www.laixuexila.com\/?p=2274"},"modified":"2025-03-03T23:15:40","modified_gmt":"2025-03-03T15:15:40","slug":"java-%e5%8f%91%e9%80%81%e9%82%ae%e4%bb%b6","status":"publish","type":"post","link":"https:\/\/www.laixuexila.com\/index.php\/2025\/03\/03\/java-%e5%8f%91%e9%80%81%e9%82%ae%e4%bb%b6\/","title":{"rendered":"Java \u53d1\u9001\u90ae\u4ef6"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Java \u53d1\u9001\u90ae\u4ef6\u901a\u5e38\u4f7f\u7528 <strong>JavaMail API<\/strong> \u6216 <strong>Spring Boot \u7684\u90ae\u4ef6\u529f\u80fd<\/strong> \u6765\u5b9e\u73b0\u3002\u5e38\u89c1\u7684\u90ae\u4ef6\u534f\u8bae\u5305\u62ec\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SMTP\uff08Simple Mail Transfer Protocol\uff09<\/strong> \u2014\u2014 \u53d1\u9001\u90ae\u4ef6<\/li>\n\n\n\n<li><strong>POP3 \/ IMAP<\/strong> \u2014\u2014 \u63a5\u6536\u90ae\u4ef6\uff08\u4e00\u822c\u7528\u4e8e\u5ba2\u6237\u7aef\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. JavaMail API \u53d1\u9001\u90ae\u4ef6<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">JavaMail API \u662f Java \u5b98\u65b9\u63d0\u4f9b\u7684\u90ae\u4ef6\u53d1\u9001\u5e93\uff0c\u5e38\u7528\u4e8e SMTP \u53d1\u9001\u90ae\u4ef6\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1.1 \u6dfb\u52a0 JavaMail \u4f9d\u8d56<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f7f\u7528 <strong>Maven<\/strong>\uff0c\u9700\u6dfb\u52a0 <code>javax.mail<\/code> \u4f9d\u8d56\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;com.sun.mail&lt;\/groupId&gt;\n    &lt;artifactId&gt;javax.mail&lt;\/artifactId&gt;\n    &lt;version&gt;1.6.2&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6216\u8005 <strong>Jakarta Mail<\/strong>\uff08\u65b0\u7248\u652f\u6301\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.eclipse.angus&lt;\/groupId&gt;\n    &lt;artifactId&gt;angus-mail&lt;\/artifactId&gt;\n    &lt;version&gt;2.0.2&lt;\/version&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1.2 \u4f7f\u7528 JavaMail \u53d1\u9001\u90ae\u4ef6<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0b\u9762\u793a\u4f8b\u4f7f\u7528 <strong>SMTP<\/strong> \u901a\u8fc7 <strong>Gmail<\/strong> \u53d1\u9001\u90ae\u4ef6\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u6b65\u9aa4<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u914d\u7f6e SMTP \u670d\u52a1\u5668<\/li>\n\n\n\n<li>\u521b\u5efa <code>Session<\/code> \u5bf9\u8c61<\/li>\n\n\n\n<li>\u53d1\u9001 <code>MimeMessage<\/code> \u90ae\u4ef6<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>import javax.mail.*;\nimport javax.mail.internet.*;\nimport java.util.Properties;\n\npublic class EmailSender {\n    public static void main(String&#91;] args) {\n        String host = \"smtp.gmail.com\"; \/\/ SMTP \u670d\u52a1\u5668\u5730\u5740\n        String username = \"your-email@gmail.com\"; \/\/ \u53d1\u9001\u90ae\u7bb1\n        String password = \"your-password\"; \/\/ \u5e94\u7528\u4e13\u7528\u5bc6\u7801\uff08Gmail \u9700\u8981\uff09\n        String toEmail = \"recipient@example.com\"; \/\/ \u6536\u4ef6\u4eba\u90ae\u7bb1\n\n        \/\/ 1. \u914d\u7f6e SMTP \u670d\u52a1\u5668\u5c5e\u6027\n        Properties props = new Properties();\n        props.put(\"mail.smtp.auth\", \"true\");\n        props.put(\"mail.smtp.starttls.enable\", \"true\");\n        props.put(\"mail.smtp.host\", host);\n        props.put(\"mail.smtp.port\", \"587\"); \/\/ Gmail SMTP \u7aef\u53e3\u53f7\n\n        \/\/ 2. \u521b\u5efa Session\n        Session session = Session.getInstance(props, new Authenticator() {\n            protected PasswordAuthentication getPasswordAuthentication() {\n                return new PasswordAuthentication(username, password);\n            }\n        });\n\n        try {\n            \/\/ 3. \u521b\u5efa\u90ae\u4ef6\u5185\u5bb9\n            Message message = new MimeMessage(session);\n            message.setFrom(new InternetAddress(username));\n            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));\n            message.setSubject(\"Java \u53d1\u9001\u90ae\u4ef6\u6d4b\u8bd5\");\n            message.setText(\"\u4f60\u597d\uff0c\u8fd9\u662f\u4e00\u5c01\u901a\u8fc7 JavaMail API \u53d1\u9001\u7684\u6d4b\u8bd5\u90ae\u4ef6\uff01\");\n\n            \/\/ 4. \u53d1\u9001\u90ae\u4ef6\n            Transport.send(message);\n            System.out.println(\"\u90ae\u4ef6\u53d1\u9001\u6210\u529f\uff01\");\n\n        } catch (MessagingException e) {\n            e.printStackTrace();\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1.3 \u53d1\u9001\u5e26\u9644\u4ef6\u7684\u90ae\u4ef6<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u53ef\u4ee5\u4f7f\u7528 <code>MimeMultipart<\/code> \u53d1\u9001 <strong>\u5e26\u9644\u4ef6\u7684\u90ae\u4ef6<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import javax.mail.*;\nimport javax.mail.internet.*;\nimport java.util.Properties;\nimport java.io.File;\n\npublic class EmailWithAttachment {\n    public static void main(String&#91;] args) throws Exception {\n        String host = \"smtp.gmail.com\";\n        String username = \"your-email@gmail.com\";\n        String password = \"your-password\";\n        String toEmail = \"recipient@example.com\";\n\n        Properties props = new Properties();\n        props.put(\"mail.smtp.auth\", \"true\");\n        props.put(\"mail.smtp.starttls.enable\", \"true\");\n        props.put(\"mail.smtp.host\", host);\n        props.put(\"mail.smtp.port\", \"587\");\n\n        Session session = Session.getInstance(props, new Authenticator() {\n            protected PasswordAuthentication getPasswordAuthentication() {\n                return new PasswordAuthentication(username, password);\n            }\n        });\n\n        Message message = new MimeMessage(session);\n        message.setFrom(new InternetAddress(username));\n        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));\n        message.setSubject(\"\u5e26\u9644\u4ef6\u7684 Java \u90ae\u4ef6\");\n\n        \/\/ \u521b\u5efa\u90ae\u4ef6\u5185\u5bb9\n        MimeBodyPart messageBodyPart = new MimeBodyPart();\n        messageBodyPart.setText(\"\u4f60\u597d\uff0c\u8bf7\u67e5\u770b\u9644\u4ef6\uff01\");\n\n        \/\/ \u6dfb\u52a0\u9644\u4ef6\n        MimeBodyPart attachmentPart = new MimeBodyPart();\n        attachmentPart.attachFile(new File(\"path\/to\/file.pdf\")); \/\/ \u672c\u5730\u6587\u4ef6\u8def\u5f84\n\n        Multipart multipart = new MimeMultipart();\n        multipart.addBodyPart(messageBodyPart);\n        multipart.addBodyPart(attachmentPart);\n\n        message.setContent(multipart);\n\n        Transport.send(message);\n        System.out.println(\"\u90ae\u4ef6\u53d1\u9001\u6210\u529f\uff01\");\n    }\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. \u4f7f\u7528 Spring Boot \u53d1\u9001\u90ae\u4ef6<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Boot \u901a\u8fc7 <strong>Spring Mail<\/strong> \u7b80\u5316\u4e86 JavaMail API \u64cd\u4f5c\uff0c\u9002\u7528\u4e8e\u4f01\u4e1a\u5e94\u7528\u5f00\u53d1\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.1 \u6dfb\u52a0 Spring Boot \u4f9d\u8d56<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;dependency&gt;\n    &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n    &lt;artifactId&gt;spring-boot-starter-mail&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.2 \u914d\u7f6e\u90ae\u4ef6 SMTP<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 <code>application.properties<\/code> \u6216 <code>application.yml<\/code> \u4e2d\u6dfb\u52a0\u90ae\u4ef6\u670d\u52a1\u5668\u914d\u7f6e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>spring.mail.host=smtp.gmail.com\nspring.mail.port=587\nspring.mail.username=your-email@gmail.com\nspring.mail.password=your-password\nspring.mail.properties.mail.smtp.auth=true\nspring.mail.properties.mail.smtp.starttls.enable=true<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.3 \u53d1\u9001\u7b80\u5355\u90ae\u4ef6<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u521b\u5efa <code>EmailService<\/code> \u53d1\u9001\u90ae\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.mail.SimpleMailMessage;\nimport org.springframework.mail.javamail.JavaMailSender;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class EmailService {\n    @Autowired\n    private JavaMailSender mailSender;\n\n    public void sendSimpleEmail(String to, String subject, String text) {\n        SimpleMailMessage message = new SimpleMailMessage();\n        message.setFrom(\"your-email@gmail.com\");\n        message.setTo(to);\n        message.setSubject(subject);\n        message.setText(text);\n        mailSender.send(message);\n        System.out.println(\"\u90ae\u4ef6\u53d1\u9001\u6210\u529f\uff01\");\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8c03\u7528\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@Autowired\nprivate EmailService emailService;\n\nemailService.sendSimpleEmail(\"recipient@example.com\", \"\u6d4b\u8bd5\u90ae\u4ef6\", \"\u4f60\u597d\uff0c\u8fd9\u662f Spring Boot \u53d1\u9001\u7684\u90ae\u4ef6\uff01\");<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.4 \u53d1\u9001\u5e26\u9644\u4ef6\u7684\u90ae\u4ef6<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Spring Mail \u4e5f\u652f\u6301 <strong>\u9644\u4ef6\u53d1\u9001<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.mail.javamail.JavaMailSender;\nimport org.springframework.mail.javamail.MimeMessageHelper;\nimport org.springframework.stereotype.Service;\n\nimport javax.mail.MessagingException;\nimport javax.mail.internet.MimeMessage;\nimport java.io.File;\n\n@Service\npublic class EmailService {\n\n    @Autowired\n    private JavaMailSender mailSender;\n\n    public void sendEmailWithAttachment(String to, String subject, String text, String filePath) throws MessagingException {\n        MimeMessage message = mailSender.createMimeMessage();\n        MimeMessageHelper helper = new MimeMessageHelper(message, true);\n\n        helper.setFrom(\"your-email@gmail.com\");\n        helper.setTo(to);\n        helper.setSubject(subject);\n        helper.setText(text);\n\n        \/\/ \u6dfb\u52a0\u9644\u4ef6\n        File file = new File(filePath);\n        helper.addAttachment(file.getName(), file);\n\n        mailSender.send(message);\n        System.out.println(\"\u90ae\u4ef6\u53d1\u9001\u6210\u529f\uff01\");\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8c03\u7528\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>emailService.sendEmailWithAttachment(\"recipient@example.com\", \"\u5e26\u9644\u4ef6\u7684\u90ae\u4ef6\", \"\u4f60\u597d\uff0c\u8bf7\u67e5\u6536\u9644\u4ef6\uff01\", \"path\/to\/file.pdf\");<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. \u603b\u7ed3<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u65b9\u5f0f<\/th><th>\u9002\u7528\u573a\u666f<\/th><th>\u4e3b\u8981\u7279\u70b9<\/th><\/tr><\/thead><tbody><tr><td><strong>JavaMail API<\/strong><\/td><td>\u9002\u7528\u4e8e\u6240\u6709 Java \u9879\u76ee<\/td><td>\u7075\u6d3b\u4f46\u9700\u8981\u624b\u52a8\u7ba1\u7406\u914d\u7f6e<\/td><\/tr><tr><td><strong>Spring Mail<\/strong><\/td><td>Spring Boot \u9879\u76ee<\/td><td>\u7b80\u5355\u6613\u7528\uff0c\u96c6\u6210\u5ea6\u9ad8<\/td><\/tr><tr><td><strong>SMTP \u53d1\u9001<\/strong><\/td><td>\u53d1\u9001\u666e\u901a\u90ae\u4ef6<\/td><td>\u9002\u7528\u4e8e\u5927\u591a\u6570\u573a\u666f<\/td><\/tr><tr><td><strong>\u5e26\u9644\u4ef6\u90ae\u4ef6<\/strong><\/td><td>\u53d1\u9001\u6587\u4ef6\u3001PDF<\/td><td>\u9700\u8981 <code>MimeMultipart<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u7684\u9879\u76ee\u662f <strong>Spring Boot<\/strong>\uff0c\u5efa\u8bae\u4f7f\u7528 <strong>Spring Mail<\/strong>\uff0c\u4ee3\u7801\u7b80\u6d01\uff0c\u96c6\u6210\u5ea6\u9ad8\u3002\ud83d\ude80<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u66f4\u591a\u8be6\u7ec6\u5185\u5bb9\u8bf7\u5173\u6ce8\u5176\u4ed6\u76f8\u5173\u6587\u7ae0\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java \u53d1\u9001\u90ae\u4ef6\u901a\u5e38\u4f7f\u7528 JavaMail API \u6216 Spring Boot \u7684\u90ae\u4ef6\u529f\u80fd \u6765\u5b9e\u73b0\u3002\u5e38\u89c1\u7684\u90ae [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68],"tags":[],"class_list":["post-2274","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts\/2274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/comments?post=2274"}],"version-history":[{"count":1,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts\/2274\/revisions"}],"predecessor-version":[{"id":2275,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/posts\/2274\/revisions\/2275"}],"wp:attachment":[{"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/media?parent=2274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/categories?post=2274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.laixuexila.com\/index.php\/wp-json\/wp\/v2\/tags?post=2274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}