gpt4 book ai didi

java - javamail API 中的 SMTP 身份验证问题

转载 作者:行者123 更新时间:2023-12-02 13:15:45 26 4
gpt4 key购买 nike

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.event.*;
import java.net.*;
import java.util.*;
public class servletmail extends HttpServlet
{
public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
PrintWriter out=response.getWriter();
response.setContentType("text/html");
try
{
Properties props=new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host","smtp.gmail.com");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("user", "pass");
}
};
Session sess=Session.getDefaultInstance(props,authenticator);
Message msg=new MimeMessage(sess);
msg.setFrom(new InternetAddress("abc@gmail.com"));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress("abc@gmail.com"));
msg.setSubject("Hello JavaMail");
msg.setText("Welcome to JavaMail");
Transport.send(msg);
out.println("mail has been sent");
}
catch(Exception e)
{
System.out.println("err"+e);
}
}
}

我正在使用上面的方法,但出现以下错误

servletmail.java:22: reference to Authenticator is ambiguous, both class java.ne
t.Authenticator in java.net and class javax.mail.Authenticator in javax.mail mat
ch
Authenticator authenticator = new Authenticator()
^
servletmail.java:22: reference to Authenticator is ambiguous, both class java.ne
t.Authenticator in java.net and class javax.mail.Authenticator in javax.mail mat
ch
Authenticator authenticator = new Authenticator()
^
2 errors

我遵循了

中的示例

http://java.sun.com/developer/onlineTraining/JavaMail/contents.html

我应该如何获得输出..上面的代码会...工作需要进行哪些更改..im 使用 Thunderbird smtp 服务器

最佳答案

该错误表明此处引用了两个可能的 Authenticator 类 - 即 java.net.Authenticator 和 javax.mail.Authenticator,如错误所述。

这是因为您导入了 java.net.* 和 javax.mail.* 并且编译器不知道您需要哪个Authenticator

通过显式导入来修复此问题

import javax.mail.Authenticator;

将第 22 行的 validator 限定为

javax.mail.Authenticator authenticator = new javax.mail.Authenticator()
<小时/>

更新

由于您在发送邮件时遇到问题,请首先检查您的网络管理员是否授予您连接到 gmail 上的 smtp 服务器的权限。你是在代理后面吗?

创建sess后,将此行添加到代码中:sess.setDebug(true);

查看消息,看看您走了多远。

尝试以下给出的其他调试技巧:http://java.sun.com/products/javamail/FAQ.html#debug

更新2

我已经尝试运行您的代码,它对我有用,包括发送电子邮件。我必须为 props 添加一行

props.put("mail.smtp.starttls.enable","true");

当然,将此 return new PasswordAuthentication("user", "pass"); 更改为您的实际用户名/密码。并将“abc@gmail.com”替换为您的实际电子邮件 ID。

关于java - javamail API 中的 SMTP 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com