java - 发送邮件时如何在java中支持阿拉伯语单词
问题描述
我已经将 springboot 与 JPA 一起使用。我的代码是
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
波乔
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
当我保存阿拉伯字符时,它成功保存在数据库中。
但是我什么时候取东西????像这样。当我调试并停止时,我看到它在该对象上正确获取了阿拉伯字体。
电子邮件发送代码
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 + "");
}
}
做错了什么请帮助我。
解决方案
请检查您的控制台是否使用字符集 UTF-8 并设置您的电子邮件的字符集,例如:
msg.setContent(emailmessage.getBody(), "text/html;charset=utf-8");
推荐阅读
- amazon-web-services - 了解 Sagemaker Neo
- php - 如何在对象数组中搜索一个值并在 Laravel 中获取它?
- deep-learning - 在大容量网络上训练少量数据
- python - 全部在 rst 文件中创建目录树
- python - Numpy数组python:熊猫系列中的转换
- xamarin - XAMARIN Visual Studio 2017 - Android 模拟器黑屏
- telegram - 如何通过 TDLib(电报数据库库)禁止组中的用户
- javascript - 在 JS 中使用 twig 变量
- kubernetes - Kubernetes 容器中 JVM 的运行时处理器计算
- javascript - 尝试从 html 读取数据时出现 w.fn.init 错误