wp_mailが正しく機能しているかどうかを確認しますか?
-
-
残りの質問は次のとおりです.`mv_mail_token() `とは何ですか、それは何を返しますか、定数` sender_signature`はどこから来て、何が含まれていますか?Now the remaining questions are: What is `mv_mail_token()` and what does it return and where does the constant `sender_signature` come from and what does it contain?
- 0
- 2013-06-23
- kaiser
-
カイザー、聞いて、質問に答えてみてください... wp_mail_token()は文字列を返し、sender_signatureはうまくいきます.Kaiser, listen, please try to answer the questions ... wp_mail_token() returns a string and sender_signature does at well.
- 1
- 2013-06-24
- helle
-
[デバッグの要点](https://gist.github.com/franz-josef-kaiser/4063197)[debug gist](https://gist.github.com/franz-josef-kaiser/4063197)
- 2
- 2013-06-24
- kaiser
-
5 回答
- 投票
-
- 2015-11-01
Wordpressは、PHPMailerクラスに依存して、PHPの
mail
関数を介してメールを送信します.PHPの
mail
関数は実行後にほとんど情報を返さないため(TRUEまたはFALSEのみ)、mv_optin_mail
関数を一時的に最小限に抑えて、次のことを確認することをお勧めします.wp_mail
関数は機能します.例:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
PHPの
mail
関数はすでにテスト済みなので、メールが届くはずです.そうでない場合、問題は関数の他のステートメントまたはPHPMailerクラスにあります.
このような場合、私は通常、関数の名前を次のように変更します.
function mv_optin_mail_backup( $id, $data ) {
そして、同じ名前の一時関数を追加して、次のように混乱させます.
function mv_optin_mail( $id, $data ) { $mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult; }
問題が何かを理解したら、バックアップバージョンの使用を再開します.
PHPMailerを使用してメールを直接送信するには、次のようにします(本番用ではなく、デバッグ用):
add_action( 'phpmailer_init', 'my_phpmailer_example' ); function my_phpmailer_example( $phpmailer ) { $phpmailer->isSMTP(); //$phpmailer->Host = 'smtp.example.com'; // $phpmailer->SMTPAuth = true; // Force it to use Username and Password to authenticate $phpmailer->Port = 25; // $phpmailer->Username = 'yourusername'; // $phpmailer->Password = 'yourpassword'; // Additional settings… //$phpmailer->SMTPSecure = "tls"; // Choose SSL or TLS, if necessary for your server $phpmailer->setFrom( "[email protected]", "From Name" ); $phpmailer->addAddress( "[email protected]", "Your name" ); $phpmailer->Subject = "Testing PHPMailer"; $phpmailer->Body = "Hurray! \n\n Great."; if( !$phpmailer->send() ) { echo "Mailer Error: " . $phpmailer->ErrorInfo; } else { echo "Message sent!"; } }
Wordpress relies on the PHPMailer class to send email through PHP's
mail
function.Since PHP's
mail
function returns very little information after execution (only TRUE or FALSE), I suggest temporarily stripping down yourmv_optin_mail
function to a minimum in order to see if thewp_mail
functions works.Example:
$mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult;
Since you've tested PHP's
mail
function already, the mail should arrive.If it does not, the problem lies in the other statements of your function or in the PHPMailer class.
In cases like this, I usually rename my function to something like:
function mv_optin_mail_backup( $id, $data ) {
And add a temporary function with the same name to mess around with like so:
function mv_optin_mail( $id, $data ) { $mailResult = false; $mailResult = wp_mail( '[email protected]', 'test if mail works', 'hurray' ); echo $mailResult; }
When I have figured out what the problem is, I start using the backup version again.
To send a mail using PHPMailer directly you can do something like this (not for production, just for debugging):
add_action( 'phpmailer_init', 'my_phpmailer_example' ); function my_phpmailer_example( $phpmailer ) { $phpmailer->isSMTP(); //$phpmailer->Host = 'smtp.example.com'; // $phpmailer->SMTPAuth = true; // Force it to use Username and Password to authenticate $phpmailer->Port = 25; // $phpmailer->Username = 'yourusername'; // $phpmailer->Password = 'yourpassword'; // Additional settings… //$phpmailer->SMTPSecure = "tls"; // Choose SSL or TLS, if necessary for your server $phpmailer->setFrom( "[email protected]", "From Name" ); $phpmailer->addAddress( "[email protected]", "Your name" ); $phpmailer->Subject = "Testing PHPMailer"; $phpmailer->Body = "Hurray! \n\n Great."; if( !$phpmailer->send() ) { echo "Mailer Error: " . $phpmailer->ErrorInfo; } else { echo "Message sent!"; } }
-
- 2017-05-21
「wp_mail_failed」アクションを使用して、送信エラーをキャッチできます.
https://developer.wordpress.org/reference/hooks/wp_mail_failed/
You can use the 'wp_mail_failed' action to catch a send error.
https://developer.wordpress.org/reference/hooks/wp_mail_failed/
-
- 2015-11-01
wp_mail()
が電子メールを正しく送信しているかどうかをテストするために通常行うことは、自分のWebサイトに別の電子メールアドレスで登録し、電子メールが到着するかどうかを確認することです.もしそうなら、それはWordPressが適切に電子メールを送信していることを意味し(wp_mail()
を使用して登録電子メールを送信します)、メール送信機能にエラーがないか調べる必要があります.これを行うには、@ Tobiasが提案したように、メール送信機能からすべてを取り除き、基本的なものだけを残す必要があります:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
さらに、WordPressによって送信された電子メール(PHPの
mail()
関数によって送信されたすべての電子メールが一部の電子メールサーバーによってブロックされる(またはスパムとしてマークされる)可能性があるため、常にライブWebサイトの電子メールにはSMTP(それを行う複数のプラグイン)を使用することをお勧めします.What I usually do to test if
wp_mail()
is sending e-mails properly is just registering on my website with another e-mail address and seeing if the e-mail arrives. If it does, it means that WordPress is properly sending e-mails (it useswp_mail()
to send registration e-mails) and you should inspect your mail sending function for any errors. To do that, as @Tobias suggested, you should strip everything from your mail sending function and only leave the basic:function wpse_100047() { echo wp_mail( '[email protected]', 'WP Mail Test', 'Mail is working' ); }
Additionally, the e-mails sent by WordPress (as all e-mails sent by PHP's
mail()
function might be blocked by some e-mail servers (or marked as spam) so it's always a good idea to use SMTP (multiple plugins that do that) for e-mails on the live website. -
- 2014-04-22
まず、wp-configで WP_DEBUG を有効にして、コードについて何かが表示されるかどうかを確認します.またはwp_mail関数のコード.これで、WPを使用してすぐにデバッグできます.
また、 Easy WP SMTP を使用して、デバッグを有効にしたり、設定したりできます.SMTPを使用します.WordPress.orgにも同様のプラグインがありますが、これには優れたデバッグオプションがあることを私は知っています.Gmailのようなものが機能する場合は、それがサーバー設定であり、このコードではないことがわかります.
I would start by enabling WP_DEBUG in wp-config and see if that shows you anything about your code or the code for the wp_mail function. That is about it for debugging right out of the box with WP.
Also, you can use Easy WP SMTP and enable debugging and/or set that up to use SMTP. There are similar plugins on WordPress.org but I know this one has a good debug option. If something like GMail works then you'll know it is a server setting and not this code.
-
- 2020-04-14
このドキュメントには非常に興味深い提案がありました.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
特にAzure仮想マシンでの作業では、SELinux構成が発信接続をブロックしていました.
次のようなエラーが表示された場合 <コード> SMTP-&gt;エラー:サーバーへの接続に失敗しました:アクセスが拒否されました(13) 、PHPを妨げるSELinuxに遭遇している可能性があります またはWebサーバーが電子メールを送信しないようにします.これは特に可能性が高いです RedHat/Fedora/Centos
getsebool
コマンドを使用して、次のことを確認できます. httpdデーモンは、ネットワークを介した接続を許可され、 メールを送信する:getsebool httpd_can_sendmail Getsebool httpd_can_network_connect
このコマンドは、ブール値のオンまたはオフを返します.オフの場合はオンにできます:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
fastcgiを介してPHP-FPMを実行している場合は、 これをhttpdではなくfpmデーモンに適用する必要がある場合があります.
Very interesting suggestions were in this document.
https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
In particular working with Azure Virtual Machine the SELinux config was blocking the outgoing connections.
If you see an error like
SMTP -> ERROR: Failed to connect to server: Permission denied (13)
, you may be running into SELinux preventing PHP or the web server from sending email. This is particularly likely on RedHat / Fedora / Centos. Using thegetsebool
command we can check if the httpd daemon is allowed to make a connection over the network and send an email:getsebool httpd_can_sendmail getsebool httpd_can_network_connect
This command will return a boolean on or off. If it's off, we can turn it on:
sudo setsebool -P httpd_can_sendmail 1 sudo setsebool -P httpd_can_network_connect 1
If you're running PHP-FPM via fastcgi, you may need to apply this to the fpm daemon rather than httpd.
wp_mail
(ローカルマシンでテスト)を使用しようとしていますが、メールが受信されません.php.ini
にはsmtp_port = 25
が設定されており、phpmail()
はこれまで機能しています.これが私のメール機能のコードです:
エラーは発生しません. WordPressのエラーログを切り替える方法はありますか?
noreply_address
はnoreply@root