كيفية تعيين نوع المحتوى لرسائل البريد الإلكتروني المرسلة باستخدام JavaMailSenderImpl
سؤال
السؤال هو من الموضوع.أنا أستخدم JavaMailSenderImpl من Spring 3.0.3.RELEASE والسرعة 1.6.4 لإعداد البريد من القالب.
عندما أرسل بريدًا إلكترونيًا مع أحرف كرواتية من مستلم الويب الخاص بي ، يتلقى "؟" في موقف الشخصيات الكرواتية العادية.إذا قمت بتشغيل وضع التصحيح للرسائل ، من السجل أستطيع أن أرى ذلك نوع المحتوى تم ضبطه على:
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
كيف يمكنني ضبطه على:
Content-Type: text/html; charset=utf-8?
أنا أستخدم Gmail لإرسال البريد أثناء تطوير تطبيق الويب هذا.
فيما يلي إعداداتي في ملف Spring's servlet 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:
<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");