发送邮件时如何在Java中支持阿拉伯语单词

问题描述

我在JPA中使用了springboot。我的密码是

application.xml中的连接属性:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/userdb?useUnicode=yes&characterEncoding=UTF-8
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect 

Pojo

class User{
@Id
    @Column(name = "username",unique = true,nullable = false,length = 64)
    private String username;
@Column(name = "password")
    private String password;
@Column(name = "email",length = 100)
    private String email;
//getter and setter
//to string()
}

mysql表属性

CREATE TABLE `User` (
  `username` varchar(64) CHARACTER SET utf8 NOT NULL,`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

在保存阿拉伯字符时,已成功将其保存在数据库中。

但是当获取时得到了吗?像这样。当我调试并停止时,我看到它在该对象上正确获得了阿拉伯字体。

debug screen

电子邮件发送代码

private void initSession() {
    Properties props = new Properties();
    props.setProperty("mail.smtp.host","smtp.gmail.com");
    props.put("mail.smtp.auth","true");
    props.put("mail.smtp.port","587");
    props.setProperty("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.socketFactory.port","587");
    props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
//        props.put("mail.debug","true");
    

    session = Session.getInstance(props,new javax.mail.Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username,password);
        }
    });
}
public String forgetPassword(String accounts,String e_address) {
    EmailMessage emailMessage = new EmailMessage();
    emailMessage.setSubject("Forget Password");
    emailMessage.setBody(MessageTemplate.forgetPassword(accounts));
    emailMessage.setTo_address(e_address);
    try {
        sendEmail(emailMessage);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
    return "Successfully send";
}
private void sendmail(EmailMessage emailmessage) throws AddressException,MessagingException,IOException {
    
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(username,false));
    
            msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(emailmessage.getTo_address()));
            msg.setSubject(emailmessage.getSubject());
            msg.setContent(emailmessage.getBody(),"text/html");
            msg.setSentDate(new Date());
    
            MimeBodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setContent(emailmessage.getBody(),"text/html");
    
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);
    
            msg.setContent(multipart);
            // sends the e-mail
            Transport.send(msg);
    
        }

服务代码

public String getAllAccount(String email) {
        List<User> users = myUserRepository.findByEmail(email);
        System.out.println(users.toString());
        return users.toString();
    }

控制器代码

     @PostMapping("/forgetPassword")
    public ResponseEntity forgetPassword(@RequestBody GetEmail getEmail) {
        ResponseEntity responseEntity;
        Map<String,String> result = new HashMap<>();
        if (!PatternMatch.isValidEmail(getEmail.getEmail())) {
            result.put("result",UserConstant.UNSUPPORTED_EMAIL + "");
        } else {
            String accounts = service.getAllAccount(getEmail.getEmail());
            System.out.println("accounts " + accounts);
            if (accounts.equals("")) {
                result.put("result",UserConstant.EMAIL_NOT_EXISTS + "");
            } else {
                new Thread(() -> {
                    final EmailSender sender = EmailSender.getInstance();
                    sender.forgetPassword(accounts,getEmail.getEmail());
                }) {
                }.start();
                result.put("result",UserConstant.EMAIL_SENT_SUCCESSFULLY + "");
            }
        }

做错了什么,请帮帮我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)