如何为 Moodle 配置 Mailgun?

How do I configure Mailgun for Moodle?

Mailgun 与 Moodle 一起使用的正确配置是什么?我在 Google Cloud 上使用 Bitnami Moodle 图像。

我收到此错误消息。

发送密码更改确认电子邮件时出错

有关此错误的更多信息

调试信息: 错误代码:cannotmailconfirm 堆栈跟踪: /lib/setuplib.php 第 495 行:moodle_exception 抛出 /login/lib.php 的第 110 行:调用 print_error() /login/forgot_password.php 的第 81 行:调用 core_login_process_password_reset_request() 输出缓冲区:

 2016-11-18 14:21:25 连接:打开到 smtp.mailgun.org:25,超时=300,选项=array ( ) 2016-11-18 14:23:32 SMTP错误:无法连接到服务器:连接超时 (110) 2016-11-18 14:23:32 SMTP connect() 失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

您应该尝试使用端口 465 而不是端口 25 并将加密设置为 SSL.

我个人没有用过moodle,但我相信你可以这样做: UPDATE mdl_config SET value='ssl://smtp.mailgun.org:465' WHERE name='smtphosts';

Google Compute Engine does not allow outbound connections on ports 25, 465, and 587. By default, these outbound SMTP ports are blocked because of the large amount of abuse these ports are susceptible to.

出站端口 25 为 blocked on Google Cloud。 Mailgun mirrors 587, on port 2525 - 所以请尝试使用端口 2525。

作为快速测试,您还可以尝试从命令行远程登录以检查连接性,如下所示:

> telnet smtp.mailgun.org 2525

我刚刚在数字海洋的服务器上完成了这项工作。所以这里是解决方案:

  • 配置您的 DNS 并在 mailgun 应用程序上检查它;
  • 在凭据中获取您的 smtp 密码;
  • SMTP 主机:smtp.mailgun.org:587
  • SMTP 安全:tls
  • SMTP 验证类型:登录
  • SMTP 用户名:poastmaster@
  • SMTP 密码:

这里的诀窍是端口 587。我尝试了一切,但就是这样。作为奖励,如果您可以通过 ssh 访问您的服务器,您可以使用以下命令从终端发送电子邮件:

./swaks --auth \
    --server smtp.mailgun.org:587 \
    --au postmaster@<yourdomain> \
    --ap <smtpcredential> \
    --to anyemail@youwantosend.com \
    --h-Subject: "Teste Moodle" \
    --body 'Testing some Mailgun awesomness!'

并且,如果你想对 php 做同样的事情,那么 运行 心情不好:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.mailgun.org:587';                 // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'postmaster@moodle.gpematec.com.br';     // SMTP username
$mail->Password = '<your credetials>';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable encryption, only 'tls' is accepted

$mail->From = 'youremail@yourdomain.com';
$mail->FromName = 'You';
$mail->addAddress('anyemail@youwantosend.com');                 // Add a recipient

$mail->WordWrap = 50;                                 // Set word wrap to 50 characters

$mail->Subject = 'PHP subject';
$mail->Body    = 'Email from php!';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
?>