我正在尝试使用JavaMailSenderImpl类找到用于连接到Gmail SMTP服务器的正确属性.
我先说我尝试过这里的方法.这很好.但是当我尝试使用完全相同的身份验证信息在该帖子下面的配置时,我收到了javax.mail.AuthenticationFailedException.
我目前的配置如下所示.
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="username" value="XXX@gmail.com" />
<property name="password" value="XXX" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.host">smtp.gmail.com</prop>
<prop key="mail.smtp.port">587</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
如果我知道我的凭据是正确的,为什么我仍然会收到此javax.mail.AuthenticationFailedException.
以下是基于以下答案的更新代码.我仍然收到同样的例外.
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="username" value="XXX@gmail.com" />
<property name="password" value="XXX" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.from">XXX@gmail.com</prop>
<prop key="mail.smtp.user">XXX@gmail.com</prop>
<prop key="mail.smtp.password">XXX</prop>
<prop key="mail.smtp.host">smtp.gmail.com</prop>
<prop key="mail.smtp.port">587</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud) 我需要在Jersey中创建一个自定义ExceptionMapper来处理Jackson返回的JsonProcessingException。
Jackson库已经以JsonMappingExceptionMapper.java和JsonParseExceptionMapper.java(link)的形式包含此异常的ExceptionMapper提供程序。
如果在“ my.package”中为此异常映射器添加新的提供程序,则有关所选提供程序的结果将无法预测。有时它将选择“ my.package”中的提供程序,有时它将选择Jackson库中的提供程序。下面是我用来扫描软件包的代码。
PackgesResourceConfig packagesResourceConfig = new PackgesResourceConfig("com.fasterxml.jackson.jaxrs", "my.package");
Run Code Online (Sandbox Code Playgroud)
拟议的解决方案
目前,我正在通过手动过滤掉Jackson库中的提供程序来解决此问题。但是我真正想知道的是,是否有一种更可接受和更受支持的方式来执行此操作。
首先,我扩展PackagesResourceConfig。
public class FilteredPackgesResourceConfig extends PackagesResourceConfig {
private Set<Class<?>> classesToFilter = new HashSet<Class<?>>();
public FilteredPackgesResourceConfig(String... packages) {
super(packages);
}
public FilteredPackgesResourceConfig(Map<String, Object> props) {
super(props);
}
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = super.getClasses();
if (classes != null && classesToFilter != null) {
classes.removeAll(classesToFilter);
}
return classes;
}
public Set<Class<?>> getClassesToFilter() {
return classesToFilter;
}
public void setClassesToFilter(Set<Class<?>> classesToFilter) {
this.classesToFilter = classesToFilter;
} …Run Code Online (Sandbox Code Playgroud)