電子メール機能のJava実装
序文
Eメールは、このような、電子メールのパスワード回復によるインスタント割引のリストを送り、新しいユーザーを追加し、異常な自動電子メール通知が表示され、その上のデーモンの監視など幅広く使用されているアプリケーション・シナリオ、です。
本論文では、網易のメールボックスは、例えば、Javaコードを通じて機能を実現するために、メッセージを送信します。
開発環境
:を参照してください基づきSpringBootサブモジュールの建築プロジェクト
コード
pom.xml導入依存性
<properties> <java.version>1.8</java.version> <!-- 你的其他依赖... --> <javax.mail.version>1.6.0</javax.mail.version> </properties> <dependencies> <!-- 你的其他依赖... --> <!-- 发送短信 --> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>${javax.mail.version}</version> </dependency> </dependencies>
メールツールを送信
package com.wayne.common.utils; import com.wayne.common.entity.CmsMailConfig; import com.wayne.common.vo.MailVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Date; import java.util.Properties; /** * 发送邮件工具类 * @author Wayne * @date 2019/6/19 */ @Component public class MailUtils { /** * 发送邮件 * @param isSingle 是否单发: true-单发 false-群发 * @param mailVo 邮件内容 * @param sendTime 发送时间, 如果为null,表示立即发送 * @param mailConfig 发件人信息及授权 */ public void sendMail(Boolean isSingle, MailVo mailVo, Date sendTime, CmsMailConfig mailConfig) throws MessagingException { Session session = this.authenticationMail(); MimeMessage message = getMimeMessage(isSingle, session, mailConfig.getMailAccount(), mailVo.getRecipients()); message = getContent(message, mailVo.getMailTiTle(), mailVo.getMailContent(), sendTime); Transport transport = session.getTransport(); transport.connect(mailConfig.getMailAccount(), mailConfig.getMailLicense()); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } /** * 校验发送的邮件内容 */ private MimeMessage getContent(MimeMessage message, String messageTitle, String messageContent, Date sendTime) throws MessagingException { if (null == messageTitle) { throw new MessagingException("邮件标题不能为空"); } if (null == messageContent) { throw new MessagingException("邮件内容不能为空"); } sendTime = sendTime == null ? new Date() : sendTime; message.setSubject(messageTitle, "UTF-8"); message.setContent(messageContent, "text/html;charset=UTF-8"); message.setSentDate(sendTime); return message; } /** * 验证认证信息 */ private Session authenticationMail() throws MessagingException { Session session; try { Properties props = new Properties(); //设置用户的认证方式 props.setProperty("mail.smtp.auth", "true"); //设置传输协议 props.setProperty("mail.transport.protocol", "smtp"); //设置发件人的SMTP服务器地址 props.setProperty("mail.smtp.host", "smtp.163.com"); session = Session.getInstance(props); session.setDebug(true); } catch (Exception e) { e.printStackTrace(); throw new MessagingException("认证失败"); } return session; } /** * @param isSingle 是否单发 * <P>true-向指定的一个收件人发送邮件,比如:找回密码、登录验证 * <P>false-向多个收件人群发邮件,比如:优惠活动推送 * <P>群发时多个收件人之间用英文逗号','分割 * @param senderAddress 发件人地址 * @param recipientAddress 收件人地址 */ private MimeMessage getMimeMessage(Boolean isSingle, Session session, String senderAddress, String recipientAddress) throws MessagingException { MimeMessage message = new MimeMessage(session); try { message.setFrom(new InternetAddress(senderAddress)); } catch (MessagingException e) { throw new MessagingException("发件人地址错误"); } /* 设置收件人地址 MimeMessage.RecipientType.TO:发送 MimeMessage.RecipientType.CC:抄送 MimeMessage.RecipientType.BCC:密送 */ if (isSingle) { message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipientAddress)); } else { message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientAddress)); } return message; } }
メッセージコンテンツオブジェクト-MailVo
package com.wayne.common.vo; import lombok.Data; /** * @author Wayne * @date 2019/6/24 */ @Data public class MailVo { /** * 邮件标题 */ private String mailTiTle; /** * 邮件内容 */ private String mailContent; /** * 收件人(们) */ private String recipients; }
送信者情報と承認
注意:ここで私は、複数の送信者があることを前提とし、不確実、あなたが動的に追加、送信者によって送信されるかを選択することができますので、私は、送信者情報はデータベースに保存されます。アプリケーションの送信者が固定されている場合は、ここでのプロジェクトまたはコンフィギュレーション・ファイルを書き込むために!
我々は適切にメールを送信するときに、私たちの電子メールアカウントにログオンパスワードを入力する必要があります。ログインパスワードを必要としない電子メールプログラムによって送信されますが、次のように認証コードの使用は、網易のメールボックスには、認証コードを取得します
- 認証を有効にします
- 承認コード
package com.wayne.common.entity; import lombok.Data; import javax.persistence.*; @Data @Table(name = "cms_mail_config") public class CmsMailConfig { /** * 主键 */ @Id @Column(name = "MAIL_ID") private Integer mailId; /** * 邮箱账号 */ @Column(name = "MAIL_ACCOUNT") private String mailAccount; /** * 授权码 */ @Column(name = "MAIL_LICENSE") private String mailLicense; /** * 状态,0:使用,1:未使用 */ @Column(name = "IS_USE") private String isUse; /** * 是否删除,0:否,1:是 */ @Column(name = "IS_DELETE") private String isDelete; /** * 创建者ID */ @Column(name = "CREATE_ADMIN_ID") private Integer createAdminId; @Column(name = "EXTEND1") private String extend1; @Column(name = "EXTEND2") private String extend2; @Column(name = "EXTEND3") private String extend3; @Column(name = "EXTEND4") private String extend4; @Column(name = "EXTEND5") private String extend5; @Column(name = "EXTEND6") private String extend6; }
サービス
@Override public ResponseBean sendMails(MailVo mailVo) { if (null == mailVo) { return ResponseBean.createInstance(Boolean.FALSE, 400, "参数异常"); } // 获取当前正在使用的发件人配置 List<CmsMailConfig> mailConfigList = mailConfigMapper.selectCurrUseMailConfig(); if (null == mailConfigList || mailConfigList.size() != 1) { return ResponseBean.createInstance(Boolean.FALSE, 400, "参数异常"); } try { // 发送邮件 mailUtils.sendMail(Boolean.FALSE, mailVo, null, mailConfigList.get(0)); return ResponseBean.createInstance(); } catch (Exception e) { e.printStackTrace(); } return ResponseBean.createInstance(Boolean.FALSE, 400, "参数异常"); }
コントローラ
@PostMapping("/mail/sendMails") public ResponseBean sendMails(MailVo mailVo) { return mailService.sendMails(mailVo); }
効果
ここでは、マニュアルトランスミッションの主な経験のコード機能を送信します。適応実際の運用環境に応じて、特定のアプリケーションのシナリオ。たとえば、次のようになど、一般的な場合に、ユーザがログインすると、管理者にメッセージを送信するトリガ;ユーザーがログインアドレスは共通のアドレスでないときを検出、電子メールが自動的にユーザーに通知し、毎日レポートを送信するための時間をタスクタイマーを組み合わせることにより、
結論
いいえ、私は国民が灌漑に来るために歓迎されて開かれています