Spring의 JavaMailSenderImpl을 사용하여 보낸 이메일의 콘텐츠 유형을 설정하는 방법
문제
질문은 주제부터 입니다.저는 템플릿에서 메일을 준비하기 위해 spring 3.0.3.RELEASE 및 속도 1.6.4의 JavaMailSenderImpl을 사용하고 있습니다.
웹앱에서 크로아티아어 문자로 이메일을 보내면 수신자가 일반 크로아티아어 문자 대신 "?" 를 수신합니다.메일에 대한 디버그 모드를 켜면, 로그에서 나는 그것을 볼 수 있습니다 컨텐츠 타입 다음과 같이 설정됩니다:
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
어떻게 설정할 수 있나요?
Content-Type: text/html; charset=utf-8?
저는 이 웹앱을 개발하는 동안 메일 전송을 위해 Gmail을 사용하고 있습니다.
스프링 서블릿 xml conf 파일의 설정은 다음과 같습니다.
<bean id="userAuthorizationManager" class="com.mypackage.manage.SimpleUserAuthorizationManagerImpl">
<property name="mailSender" ref="mailSender" />
<property name="velocityEngine" ref="velocityEngine" />
<property name="from" value="address" />
<property name="authorizationAddress" value="some text" />
<property name="subject" value="some text" />
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="port" value="465" />
<property name="username" value="user" />
<property name="password" value="pass" />
<property name="protocol" value="smtps" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.connectiontimeout">5000</prop>
<prop key="mail.smtp.sendpartial">true</prop>
<prop key="mail.smtp.userset">true</prop>
<prop key="mail.mime.charset">UTF-8</prop>
<prop key="mail.smtp.isSecure">true</prop>
<prop key="mail.smtp.requiresAuthentication">true</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.port">465</prop>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<prop key="mail.smtp.socketFactory.fallback">false</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.debug">true</prop>
</props>
</property>
</bean>
<bean id="velocityEngine"
class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
메일 관리자의 코드는 다음과 같습니다.
private void sendConfirmationEmail(final User user, final int requestId) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(user.getEmailAddress());
message.setFrom(from);
message.setSubject(subject);
Map<String, Object> model = new HashMap<String, Object>();
model.put("user", user);
model.put("authorizationAddress", authorizationAddress);
model.put("requestId", requestId);
String text = VelocityEngineUtils
.mergeTemplateIntoString(
velocityEngine,
"com/mypackage/mail/registration-confirmation.vm",
model);
message.setText(text, true);
}
};
PendingMail pendingMail = new PendingMail(preparator);
pool.submit(pendingMail);
}
private class PendingMail implements Callable<Object> {
MimeMessagePreparator preparator;
protected PendingMail(MimeMessagePreparator preparator) {
this.preparator = preparator;
}
public Object call() {
mailSender.send(preparator);
return null;
}
}
다른 제안이 있나요?
안부 티호
해결책
나는 그 덕분에 내 문제를 해결했다 이 게시물 .
게시물에 따라 MailSender Bean 구성에서 이것을 넣습니다.
<property name="defaultEncoding" value="UTF-8"/>
. 다른 팁
이것을 속성으로 설정할 수 있습니다 mail.mime.charset
JavaMailSenderImpl 스프링 빈 구성에서.여기에서 답변된 예를 확인하세요. 이전 쿼리.
2020 답변, XML 구성이 지금 매우 사용되지 않으므로 다음과 같이하십시오.
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.getJavaMailProperties().put("mail.mime.charset", "UTF-8");
. 다른 옵션은 다음과 같습니다 :
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setDefaultEncoding("UTF-8");
. 제휴하지 않습니다 StackOverflow