【问题标题】:I'm having an error while trying to use javax mail dependency尝试使用 javax 邮件依赖项时出错
【发布时间】:2021-01-18 22:29:34
【问题描述】:

我正在尝试在我的项目中使用 javax 邮件。我在 Gmail 中启用了安全性较低的应用,并制定了入站规则来解锁端口 465。

这是我在应用程序属性中使用的配置。

''' 
spring.mail.host=smtp.hmail.com
spring.mail.username=dumitrachesabin@gmail.com  
spring.mail.password=mypass
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.port=465 
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=false
support.email=dumitrachesabin@gmail.com
'''

允许端口:

我在网上发现需要解锁 465 端口,找到了如何解锁的快速指南,您可以在照片中看到。

在用户介绍他的注册凭据(用户名、电子邮件地址)后我设置的控制器类中,以生成一封电子邮件,其中包含指向编辑个人资料页面的链接。

当我输入用户名和邮件并点击提交时,我得到了错误

"未知 SMTP 主机:smtp.hmail.com;",

但是数据被发送到数据库。我在网页上收到错误 500。

@RequestMapping(value = "/newUser", method = RequestMethod.POST)
    public String newUserPost(HttpServletRequest request,
            @ModelAttribute("email") String userEmail,
            @ModelAttribute("username") String username, Model model) throws Exception {
        model.addAttribute("classActiveNewAccount", true);
        model.addAttribute("email", userEmail);
        model.addAttribute("username", username);

        if (userService.findByUsername(username) != null) {
            model.addAttribute("usernameExists", true);

            return "myAccount";

        }

        if (userService.findByEmail(userEmail) != null) {
            model.addAttribute("email", true);
            return "myAccount";

        }

        User user = new User();
        user.setUsername(username);
        user.setEmail(userEmail);

        String password = SecurityUtility.randomPassword();

        String encryptedPassword = SecurityUtility.passowrdEncoder().encode(password);
        user.setPassword(encryptedPassword);

        Role role = new Role();
        role.setRoleId(1);
        role.setName("ROLE_USER");
        Set<UserRole> userRoles = new HashSet<>();
        userRoles.add(new UserRole(user, role));
        userService.createUser(user, userRoles);

        String token = UUID.randomUUID().toString();
        userService.createPasswordResetTokenForUser(user, token);
        String appUrl = "http://"+ request.getServerName() + ":" + request.getServerPort() + request.getContextPath();

        SimpleMailMessage email = mailConstructor.constructResetTokenEmail(appUrl, request.getLocale(), token, user,
                password);

        mailSender.send(email);
        model.addAttribute("emailSent", true);
        
        return "myAccount";

这里有邮件构造函数类。

@Component
public class MailConstructor {
    @Autowired

    private Environment env;

    public SimpleMailMessage constructResetTokenEmail(
            String contextPath, Locale locale, String token, User user,
            String password) {
        String url = contextPath + "/newUser?token=" + token;
        String message = "\nPlease click on this link to verify your email and edit your personal information. Your password is:\n"
                + password;
        SimpleMailMessage email = new SimpleMailMessage();
        email.setTo(user.getEmail());
        email.setSubject("Shop-Ufes - New User");
        email.setText(url + message);
        email.setFrom(env.getProperty("support.email"));
        return email;

    }
}

我在控制台中得到的错误是:

2020-10-03 16:57:22.256 ERROR 6952 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Unknown SMTP host: smtp.hmail.com;
  nested exception is:
    java.net.UnknownHostException: smtp.hmail.com. Failed messages: javax.mail.MessagingException: Unknown SMTP host: smtp.hmail.com;
  nested exception is:
    java.net.UnknownHostException: smtp.hmail.com; message exceptions (1) are:
Failed message 1: javax.mail.MessagingException: Unknown SMTP host: smtp.hmail.com;
  nested exception is:
    java.net.UnknownHostException: smtp.hmail.com] with root cause

java.net.UnknownHostException: smtp.hmail.com

【问题讨论】:

    标签: java email smtp jakarta-mail


    【解决方案1】:

    除此之外,您的设置似乎是有效的

    spring.mail.host=smtp.hmail.com
    

    似乎存在与主机名相关的拼写错误。我认为应该是

    spring.mail.host=smtp.gmail.com
    

    【讨论】:

    • 谢谢,但现在我有这个“失败的消息:javax.mail.MessagingException:无法连接到 SMTP 主机:smtp.gmail.com,端口:25;”我打开了所有端口 465 587 25。并在“spring.mail.properties.mail.smtp.socketFactory.port=25”中尝试所有这些
    • @sabinufes 如果要在另一台服务器上的该端口上连接,则无需打开任何端口。从您的错误消息和Google's documentation 看来,Google 似乎只接受加密连接。
    • 所以我需要使用不同的服务?
    • 您需要调查在您决定使用的特定邮件主机上允许使用哪个端口。我的意思是,它根本与您的应用程序配置无关。它在主机端,因此,您需要对此进行调查。
    • @sabinufes,如果我回答了你的问题,请将我的回答标记为已接受 :)
    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2020-09-11
    • 2016-09-09
    • 2021-09-02
    相关资源
    最近更新 更多