7

Spring FW で JavaMail を使用しています。すべてがうまく機能していますが、FROM アドレスが常に間違っている理由がわかりません。それはそれを無視して、代わりにそれが本当にどこから来たのかを言うようです. 欲しいものは一瞬ではっきりする。まず、私のコードは次のとおりです。

設定

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com"/>
    <property name="port" value="25"/>
    <property name="username" value="[my gmail address]"/>
    <property name="password" value="[my password]"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <!--<prop key="mail.debug">true</prop>-->
        </props>
    </property>
</bean>

ヘルパークラス

@Service("mailService")
public class MailService {

    @Autowired
    private JavaMailSenderImpl mailSender;

    public void sendMail(String from, String to, String subject, String body) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(body, true);
            mailSender.send(message);
        }
        catch (MessagingException ex) {
            Logger.getLogger(MailService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    //etc...
}

コントローラのコード スニペット

mailService.sendMail(
    contactModel.getEmail(), //From
    Constants.DefaultEmailAddress, //To
    "Enquiry from site", "Phone: " + contactModel.getPhone() + "<br />Message: <br />" + contactModel.getMessage());

基本的には、お問い合わせcontactModelフォームでユーザーから情報を収集するためのいくつかのプロパティを持つ通常の Java クラスです。電子メールを送信すると、現在、FROM アドレスが TO アドレスと同じであることがわかります。私が理解できないのは、設定を変更する必要があるのか​​ 、それともGmailがおそらくこれを許可していないのかということです. 考えている人はいますか?

4

4 に答える 4

8

Google では、あなたが自分ではない誰か (他のドメイン) であることを示すメールを自分のアカウントから送信することを許可しません。

X-google-original-fromそのため、ヘッダーで指定したものを保存して承認したアカウントで Sender を上書きします。https://support.google.com/mail/answer/22370?hl=enで指定されているように、外部アカウントを追加する必要があります(または、Google Apps を使用している場合は、Google で管理される外部ドメインを追加します)。

于 2014-12-11T10:02:54.647 に答える
0

送信先アドレスが設定されていない理由がわかりません。sendMail メソッドに何が渡されているかを確認するためにログ ステートメントを追加します。

MailSender は使用するインターフェイスであるため、クラスでは MailSenderImpl ではなく MailSender を使用する必要があります。私のアプリケーションでは、MimeMessage の代わりに SimpleMailMessage を使用していますが、これでうまくいきます。以下は、過去に使用したコード スニペットです。

@Autowired
private MailSender mailSender;

// Email is my own Pojo with from, to, subject and body properties.
@Transactional(propagation = Propagation.REQUIRES_NEW)
    public void sendEmail(Email email)
    {
            // create email message
            SimpleMailMessage msg = new SimpleMailMessage();
            msg.setFrom(email.getFromAddress());
            msg.setTo(email.getToAddress());
            msg.setSubject(email.getSubject());
            msg.setText(email.getBody());

            // send the message using spring mail sender
            this.mailSender.send(msg);
    }
于 2012-12-19T06:24:49.070 に答える
0

この質問が古いことは承知していますが、Google の指示に従うことを検討してください

SMTP または SSL を使用して Google Apps メール サーバーに接続できます。SMTP を使用して接続する場合は、Gmail または Google Apps ユーザーにのみメールを送信できます。SSL を使用して接続すると、誰にでもメールを送信できます。

デバイスまたはアプリケーションが SSL をサポートしている場合は、ポート 465 または 587 で smtp.gmail.com に接続します。

ポート25を使用しています。

于 2013-09-21T12:48:12.593 に答える