كيفية تعيين نوع المحتوى لرسائل البريد الإلكتروني المرسلة باستخدام JavaMailSenderImpl

StackOverflow https://stackoverflow.com/questions/3275133

سؤال

السؤال هو من الموضوع.أنا أستخدم 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");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top