1

グレイルズプロジェクト。メールプラグインを使用していて、メソッド 'sendMail' を呼び出そうとすると例外が発生します

エラー:

Caused by: org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp. Failed messages: javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp; message exceptions (1) are:
Failed message 1: javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp

config.groovy

grails {
    mail {
        host = "smtp.gmail.com"
        port = 465
        username = "mymail@gmail.com"
        password = "mypass"
        props = ["mail.smtp.auth":"true",
                //"mail.smtp.port":"465",
                //"mail.debug":"true",
                "mail.smtp.socketFactory.port":"465",
                "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
                "mail.smtp.socketFactory.fallback":"false"]
    }
}

送信例

sendMail {
                    to "fred@gmail.com"
                    subject "Hello Fred"
                    body 'How are you?'
                }

私は何を間違っていますか?

解決

4

3 に答える 3

1

エラーは言うUnable to locate provider for protocol: smtp。smtp プロトコルの依存関係がいくつか欠けているようです。これは非常に奇妙に思えます。どうやら javamail (?) が欠けているようです。コードが私には良さそうだからです。

于 2012-10-03T16:42:12.507 に答える
0

削除しようとしましたか

            "mail.smtp.port":"465",
            "mail.debug":"true",

あなたの設定から?これが、あなたのコードと公式の例の間にある唯一の違いです。

更新: GalmWing が既に述べたように、java.mail jar ファイルに問題があるようです。この解決策を確認してください: Using Java to send email on gmail account . あなたも同じ問題を抱えているように思えます。どのJavaバージョンを使用していますか?

于 2012-10-03T18:45:44.920 に答える
0

config.groovy に追加

grails {
    mail {
      host = "smtp.gmail.com"
      port = 465
      username = "email"
      password = "pwd"
      props = ["mail.smtp.auth":"true",
               "mail.smtp.socketFactory.port":"465",
               "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory",
               "mail.smtp.socketFactory.fallback":"false"]
    }
 }

このコードを使用してメールを送信します

def sendEmail(){

    mailService.sendMail {
        to "email","**email**"
        from "email"
        subject "Hi"
        body 'Hi'
    }
}

また、クラスにメールサービスを注入することを忘れないでください

def mailService

これにより、クラスにサービスが注入されます

この構成は、メールを送信するのに十分です

于 2014-06-29T16:01:00.687 に答える