PHPMailer是一个PHP电子邮件传输类。 PHPMailer旨在与其他服务器直接通信(与PHP的本机mail()函数不同)。与[php]标签一起使用
使用 PHPMailer 时 Docker Swarm 下的主机无效
我正在 docker swarm 上配置使用 PHPMailer 的开放日志系统。我有两个图像,一个运行 php-fpm,另一个运行 postfix。从 php-fpm 我可以使用 ...
PHPMailer 可在本地运行,但不能在生产环境(Azure 主机)上运行
我正在尝试使用 PHPMailer 发送电子邮件,它在开发环境(本地 - 我的私人 leptop)上工作得很好,但在生产环境(Azure 主机)上根本不起作用。 这是我的代码
我的网站有一个联系我们页面,其中包含一个 HTML 表单,该表单将 POST 提交到使用 PHPMailer 发送电子邮件的本地 PHP 脚本。 我的问题是,如果我将网站移至 AWS Amplify,它还会...
我不确定这个问题属于服务器故障。然而我决定在这里发布这个主要是因为我正在使用 php 程序发送电子邮件。 我的问题是在 phpmaile 中配置发件人部分...
一旦我点击提交按钮,邮件就已发送。但它不是发送选定的值,而是发送列表中的每个值。我无法找到我错过的东西。请建议。 据我所知...
我正在使用PHPMailer。 我想将 php 中的动态内容添加到正文中,但我无法做到这一点。 如果我将其添加到 php 邮件程序正文中,它就可以工作。 $mail->Body = "Dados 做 1° 我正在使用 PHPMailer。 我想将 php 中的动态内容添加到正文中,但我无法做到这一点。 如果我将其添加到 php 邮件程序正文中,它就可以工作。 $mail->Body = "<h3>Dados do 1º Titular</h3><ul><li><b>Nome: </b>".$titular1_name."</li><li><b>Idade: </b>".$titular1_idade."</li><li><b>Estado Civil</b>".$titular1_estado_civil."</li><li><b>Dependentes</b>".$titular1_dependentes."</li><li><b>Rendimento</b>".$titular1_rendimento."</li><li><b>Penhora</b>".$titular1_penhora."</li></ul><h3>Dados do 2º titular</h3><ul><li><b>Nome: </b>".$titular2_name."</li><li><b>Idade: </b>".$titular2_idade."</li><li><b>Estado Civil</b>".$titular2_estado_civil."</li><li><b>Dependentes</b>".$titular2_dependentes."</li><li><b>Rendimento</b>".$titular2_rendimento."</li><li><b>Penhora</b>".$titular2_penhora."</li></ul><h3>Dados de Contacto</h3><ul><li><b>Email: </b>".$titular_email."</li><li><b>Telefone</b>".$titular_phone."</li><li><b>Localidade</b>".$titular_local."</li></ul>"; 但是我需要添加这个结果: for ($y = 0; $y <= $numberOfRows; $y++) { for ($x = 0; $x < $maxData; $x++) { array_push($row, $credito, $capital_divida, $prestacao, $bank, $garantias, $situacao); echo $row[$x]."<br>"; } array_push($fullData, $row); } 这是我针对此问题的相关代码: $row = array(); $fullData = array(); $maxData = 6; $numberOfRows = htmlspecialchars(["numberOfRowsHTML"]); $titular_email = htmlspecialchars($_POST["titular-email"]); $titular_phone = htmlspecialchars($_POST["titular-phone"]); $titular_local = htmlspecialchars($_POST["titular-local"]); $titular_message = htmlspecialchars($_POST["titular-message"]); $numberOfRows = htmlspecialchars(["numberOfRowsHTML"]); $credito = htmlspecialchars(["credito"]); $capital_divida = htmlspecialchars(["capital_div"]); $prestacao = htmlspecialchars(["prestacao"]); $bank = htmlspecialchars(["bank"]); $garantias = htmlspecialchars(["garantias"]); $situacao = htmlspecialchars(["situacao"]); 这段代码没有任何意义: $numberOfRows = htmlspecialchars(["numberOfRowsHTML"]); 您似乎缺少要从中获取此值的数组的名称,例如: $numberOfRows = htmlspecialchars($_POST["numberOfRowsHTML"]); 组装数组的循环似乎根本没有做任何有用的事情 - 您从提交中获取值,然后组装一个不使用的数组。如果您能澄清您想要做什么,将会很有帮助。
我的 php 邮件程序在本地主机上工作正常,但是当我在 cpanel 上运行相同的代码时,我收到错误消息:SMTP connect() failed 我的 php 邮件程序在本地主机上工作正常,但是当我在 cpanel 上运行相同的代码时,我收到错误消息:SMTP connect() failed <?php require 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = "tls://smtp.gmail.com"; $mail->SMTPAuth = true; $mail->Username = '********@gmail.com'; $mail->Password = '********'; $mail->Port = 587; $mail->setFrom('[email protected]', 'Mailer'); $mail->AddAddress('[email protected]', 'Joe User'); $mail->addReplyTo('[email protected]', 'Information'); $mail->isHTML(true); $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; } else { echo 'Message has been sent'; } ?> 请帮助我,我哪里错了? CPanel 默认阻止访问外部 SMTP 服务器。 在 whm > 安全中心 > SMTP 限制禁用中禁用此限制 这有效 <?php require_once('./class.phpmailer.php'); $mail = new PHPMailer(); // create a new object $mail->IsSMTP(); // enable SMTP $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only $mail->SMTPAuth = true; // authentication enabled $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail $mail->Host = "smtp.mail.yahoo.com"; $mail->Port = 465; // or 587 $mail->IsHTML(true); $mail->Username = "[email protected]"; $mail->Password = "xxxxxx"; $mail->SetFrom("[email protected]"); $mail->Subject = "Test"; $mail->Body = "hello"; $mail->AddAddress("[email protected]"); if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message has been sent"; }?> 您可能忘记启用 GMail 帐户的 SMTP 访问(它是设置中 IMAP 访问的一部分)。 此外,“tls://smtp.gmail.com”不是有效的 SMTP 服务器地址。如果您想使用 TLS,请使用 $mail->SMTPSecure = "tls";。 感谢您的建议,非常感谢:-) 我得到的解决方案如下。 1>give Absolute path for PHPMailerAutoload.php 2>host name as "localhost" 3>create dummy emailId on server <?php require'/home/username/public_html/phpmailertesting/PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; $mail->SMTPDebug =3; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'localhost'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = '[email protected]'; // SMTP username $mail->Password = '*****'; // SMTP password $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted $mail->Port = 587; // TCP port to connect to $mail->setFrom('[email protected]', 'Mailer'); $mail->addAddress('*******@gmail.com'); // Name is optional //$mail->addReplyTo('[email protected]', 'Information'); //$mail->addCC('*******@gmail.com'); //$mail->addBCC('[email protected]'); //$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments //$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body <b>in bold!</b>'; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; if(!$mail->send()) { echo 'Message could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; exit(); } else { echo 'Message has been sent'; } ?> 您需要向 ISP 公司购买 Cpanel/WHM 才能访问 Gmail 等外部 SMTP 电子邮件。首先,禁用:WHM > 安全中心 > SMTP 限制已禁用。 并确保 CSF 防火墙“SMTP_BLOCK”设置已启用。 如果您在安全设置中使用 Gmail,则启用较低的安全性,您可以使用 smtp 身份验证。 PHPMailer 建议使用 SSL 来解决所有防火墙和安全问题。 截至 2024 年 12 月 - CPanel 和 GMAIL 等电子邮件服务器有一些更新的要求。我尝试了数十种配置,这是一个完整的工作示例和 PHP 片段。我在那里留下了注释行,以向您展示我尝试过的一些额外设置。您不需要注释行。此示例假设您的服务器上有 PHPMailer 库作为文件夹/目录。您还可以使用作曲家。我可以只用 $mail->Host = 'localhost'; 直接从 CPanel 发送电子邮件,但这些电子邮件只能发送到不太安全的电子邮件服务,例如 AOL。要发送到 GMAIL,您需要启用 SSL 和 SMTPAuth,否则 GMAIL 将完全阻止电子邮件,电子邮件甚至不会进入垃圾邮件文件夹。 <?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/Exception.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/PHPMailer.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/SMTP.php'); $mail = new PHPMailer(true); try { $mail->SMTPDebug = SMTP::DEBUG_SERVER; $mail->SMTPDebug = 2; // Enables detailed debugging output // Server settings // $mail->Host = 'smtp.gmail.com'; // Gmail SMTP server // $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'localhost'; $mail->Port = 465; $mail->SMTPAuth = true; // Enable SMTP authentication $mail->SMTPSecure = 'ssl'; $mail->setFrom('any email - preferable a domain email', 'Domain Name'); $mail->addReplyTo('any email - preferable a domain email', 'Domain Name'); // $mail->isSMTP(); // $mail->Username = 'your_email'; // CPanel email address // $mail->Password = "your_pass"; // $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // Use SMTPS (SSL encryption) // $mail->Port = 25; // SMTP port for SSL // Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = "Your Subject"; $mail->Body = "<h1>Thank you message or whatever you want.</p> <p>Some info</p> <p>Maybe a welcome message.</p> <p>Extra paragraph if needed.</p>"; $mail->AltBody = "Thank you message Info without html tags Maybe a welcome message Extra paragraph if needed."; $mail->addAddress("the email you want to send to"); // Add a recipient $mail->addAddress("add a second recipient email if you want"); // Add a recipient $mail->addBcc("bcc an email if you want"); // Add a recipient $mail->Send(); } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } 当仅将主机设置为 localhost 进行测试时,我不会收到来自 GoDaddy CPanel 服务器的错误,但 GMAIL 服务器由于缺少 SSL 而阻止了它。之前回答的代码示例不起作用或无法帮助排除故障。假设您已将 PHPMailer 安装在 public_html 文件夹中,此示例将立即运行。 这是没有注释行的示例,以显示代码是多么简单: <?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/Exception.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/PHPMailer.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/PHPMailer/src/SMTP.php'); $mail = new PHPMailer(true); try { $mail->Host = 'localhost'; $mail->Port = 465; $mail->SMTPAuth = true; // Enable SMTP authentication $mail->SMTPSecure = 'ssl'; $mail->setFrom('any email - preferable a domain email', 'Domain Name'); $mail->addReplyTo('any email - preferable a domain email', 'Domain Name'); // Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = "Your Subject"; $mail->Body = "<h1>Thank you message or whatever you want.</p> <p>Some info</p> <p>Maybe a welcome message.</p> <p>Extra paragraph if needed.</p>"; $mail->AltBody = "Thank you message Info without html tags Maybe a welcome message Extra paragraph if needed."; $mail->addAddress("the email you want to send to"); // Add a recipient $mail->addAddress("add a second recipient email if you want"); // Add a recipient $mail->addBcc("bcc an email if you want"); // Add a recipient $mail->Send(); } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } ?>
当我发送电子邮件时,显示“消息发送成功”,但我们的电子邮箱中没有电子邮件。 Godaddy客户代表说他做了SPF设置。我应该怎么办? ...
我已经使用 PHPMailer 好几年了,没有任何问题,但我现在看到一些电子邮件完全空白的问题。 我的代码如下所示: 我已经使用 PHPMailer 多年,没有出现任何问题,但我现在看到一些电子邮件完全空白的问题。 我的代码如下所示: <?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; $mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = 'x'; $mail->Port =1; $mail->SMTPAuth = true; $mail->Username = 'y'; $mail->Password = 'x'; $mail->SMTPKeepAlive = true; $mail->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ] ]; $mail->setFrom('[email protected]', 'Me Notifications'); $mail->addAddress('[email protected]', 'Me Notifications'); $addresses = explode(',', $customerlist); foreach ($addresses as $address) { $mail->addBCC($address); } $mail->Subject = "REMINDER: Test"; ob_start(); ?> <html> **Loads of HTML there with PHP Echo's** </html> <?php $body = ob_get_clean(); $mail->Body = $body; $mail->IsHTML(true); if (!$mail->send()) { echo 'Mail did not send'; } else { echo 'Mail Sent - Sending 2nd email internally'; $mail->ClearAllRecipients(); $mail->setFrom('[email protected]', 'Me Notifications'); $mail->addAddress('[email protected]', 'Me Notifications'); $mail->addBCC('[email protected]', 'Internal Comms'); $mail->send(); } ?> 总的来说,代码运行良好。 我显然隐藏了一些信用信息、主机信息、电子邮件等,但不用担心。 您可以看到我向 Addresses 变量中的每个人发送了一封电子邮件作为密件抄送。 然后我跟进并发送第二封电子邮件到一个电子邮件地址。 问题是第一封电子邮件为空,而不是第二封电子邮件。 无论是否是原因,但在最近的示例中,BCC 字段中的电子邮件地址数量超过 5000 个,这对我们来说是最近的,所以可能是由某种原因引起的? 但我不明白为什么电子邮件仍然可以正常发送,日志中没有错误(我使用 SMTPDebug = 2)来显示存在问题,但电子邮件的内容是空白的。 这是一些显示内容空白的日志: 04-12-2024 13:16:50.665160 CLIENT -> SERVER: RCPT TO:<[email protected]> 04-12-2024 13:16:50.666264 SERVER -> CLIENT: 250 2.1.5 Ok 04-12-2024 13:16:50.666309 CLIENT -> SERVER: RCPT TO:<[email protected]> 04-12-2024 13:16:50.667385 SERVER -> CLIENT: 250 2.1.5 Ok 04-12-2024 13:16:50.667431 CLIENT -> SERVER: DATA 04-12-2024 13:16:50.668255 SERVER -> CLIENT: 354 End data with <CR><LF>.<CR><LF> 04-12-2024 13:16:50.668356 CLIENT -> SERVER: Date: Wed, 4 Dec 2024 13:16:44 +0000 04-12-2024 13:16:50.668529 CLIENT -> SERVER: To: Me Notifications <[email protected]> 04-12-2024 13:16:50.668581 CLIENT -> SERVER: From: Me Notifications <[email protected]> 04-12-2024 13:16:50.668625 CLIENT -> SERVER: Subject: REMINDER: Change Ref: 1 - Test Comms 04-12-2024 13:16:50.668668 CLIENT -> SERVER: Message-ID: <[email protected]> 04-12-2024 13:16:50.668710 CLIENT -> SERVER: X-Mailer: PHPMailer 6.2.0 (https://github.com/PHPMailer/PHPMailer) 04-12-2024 13:16:50.668752 CLIENT -> SERVER: MIME-Version: 1.0 04-12-2024 13:16:50.668795 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1 04-12-2024 13:16:50.668838 CLIENT -> SERVER: Content-Transfer-Encoding: quoted-printable 04-12-2024 13:16:50.668881 CLIENT -> SERVER: 04-12-2024 13:16:50.668923 CLIENT -> SERVER: 04-12-2024 13:16:50.668971 CLIENT -> SERVER: . 04-12-2024 13:16:50.717486 SERVER -> CLIENT: 250 2.0.0 Ok: queued as A4A8C83E7A 04-12-2024 13:16:50.717819 CLIENT -> SERVER: RSET 04-12-2024 13:16:50.718576 SERVER -> CLIENT: 250 2.0.0 Ok 从 04-12-2024 13:16:50.668881 可以看到它是空白的,这是应该显示电子邮件内容的地方。 有人能明白为什么会发生这种情况吗? 是否有超过 5000 的限制,以某种方式仍然允许它发送,但只是擦除内容? 如有任何帮助,我们将不胜感激 这是代码的改进版本,包含更正和额外的调试: use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\SMTP; use PHPMailer\PHPMailer\Exception; $mail = new PHPMailer(true); // Enable exceptions try { $mail->isSMTP(); $mail->Host = 'your.smtp.host'; // Correct SMTP host $mail->Port = 587; // Valid SMTP port $mail->SMTPAuth = true; $mail->Username = 'your_username'; $mail->Password = 'your_password'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // or ENCRYPTION_SMTPS $mail->SMTPKeepAlive = true; $mail->SMTPOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ], ]; $mail->setFrom('[email protected]', 'Me Notifications'); $mail->addAddress('[email protected]', 'Me Notifications'); $addresses = explode(',', $customerlist); foreach ($addresses as $address) { if (filter_var(trim($address), FILTER_VALIDATE_EMAIL)) { // Validate each email $mail->addBCC(trim($address)); } } $mail->Subject = "REMINDER: Test"; ob_start(); ?> <html> <!-- Loads of HTML here --> </html> <?php $body = ob_get_clean(); $mail->Body = $body; $mail->AltBody = 'This is the plain-text version of the email.'; $mail->isHTML(true); if (!$mail->send()) { echo 'Mail did not send. Error: ' . $mail->ErrorInfo; } else { echo 'Mail Sent - Sending 2nd email internally'; $mail->clearAllRecipients(); $mail->setFrom('[email protected]', 'Me Notifications'); $mail->addAddress('[email protected]', 'Me Notifications'); $mail->addBCC('[email protected]', 'Internal Comms'); $mail->send(); } } catch (Exception $e) { echo "Mailer Error: " . $mail->ErrorInfo; }
我想通过我的 php webapp 发送电子邮件,我总是通过 phpmailer(与 Composer 安装的 php 库)和 Outlook 帐户来完成。但他们改变了身份验证类型(https://
我一直在尝试让 PHPmailer 工作,但我不断地遇到同样的错误。我创建了一个 Gmail 帐户,通常所有设置都应该是正确的。 我收到以下错误:消息无法发送
我最近下载了 phpMailer 脚本,正如之前另一位 Stack 用户告诉我的那样,这是执行此类任务的更有效方法。 我已经设置了邮件程序并测试了从...发送电子邮件...
我已经用谷歌搜索了几天,试图了解是否可以在不需要提供程序包的情况下使用 PHPMailer OAUTH2。我已经有一个访问令牌管理流程,s...
基于 PHPMailer 提供的示例,我有以下脚本, date_default_timezone_set('Etc/UTC'); 需要'./PHPMailerAutoload.php'; $mail = 新的 PHPMailer; $mail->isSMTP(); $邮件->
我正在使用 smtp 身份验证,然后邮件也会进入垃圾邮件文件夹。 如果邮件正文包含外部文件 (file_get_containts),则邮件将进入垃圾邮件文件夹。 但是,如果邮件正文
很多人都使用 phpmailer 和 g-mail 提出了类似的问题。这个问题略有不同,可能需要不同的答案。 phpmailer 代码相当标准(如下)。我有...
AWS SES Virtual Deliverability Manager 仪表板仅显示选择性消息
我使用 AWS SES 为 Web 服务发送出站消息。这包括新帐户注册、重置密码请求、联系我们表格以及发送带有 PDF 附件的电子邮件等。 我是
我在电子邮件和 Office 下使用 GoDaddy 专业电子邮件(不是工作区电子邮件)。对于我的网站,我想使用 PHPMailer 向用户发送电子邮件。我已根据 GoDaddy 电子邮件使用了所有凭据
我正在 Yeti CRM 中使用一个表单,该表单允许用户查看文档,然后让他们选择通过电子邮件发送所述文档。它正在使用 PHPMailer,但我无法让它附加文档。全部...
我在 woocommere 结帐时遇到 phpmailer 错误
我正在尝试设置 WooCommerce 并在结帐过程中遇到错误:“此网站上出现严重错误”。我已经禁用了所有插件并测试了新的 WordPress