【问题标题】:How to send form data without PHP mail?如何在没有 PHP 邮件的情况下发送表单数据?
【发布时间】:2018-11-24 13:20:34
【问题描述】:

我正试图找出我的问题,我有一个共享主机提供,出于安全原因禁用了 PHP 邮件功能。

我需要使用PHP发送一些表单数据,我只知道如何使用PHP邮件功能发送表单数据。

我试过用phpmailer,从GitHub上得到了ir,但是没用。

我的问题很简单,是否有一种解决方法可以在没有 PHP 邮件功能的情况下发送表单数据以绕过禁用的 phpmail 和 nobody=on 在我的共享虚拟主机上进行调整?

<?php

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");
    require("phpmailer/class.smtp.php");

    $mail = new PHPMailer();

    $mail->CharSet="utf-8";
    $mail->IsSMTP();                               
    $mail->Host = 'localhost';
    $mail->Port = 465;
    $mail->SMTPAuth = true;    
    $mail->Username = "user@mysite.com";
    $mail->Password = "password"; 

    $mail->setFrom($email, $recipient_name);
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                          
    $mail->IsHTML(false);                          

    $mail->Subject = "Contact form";
    $mail->Body    = $message;

   if(!$mail->Send())
   {
       echo "Message could not be sent. <p>";
       echo "Mailer Error: " . $mail->ErrorInfo;
       exit;
   }

   echo "Message has been sent";
}

//vars
$subject = "Contac form";

$from = $_POST['email'];

//data
$msg = "NAME: "  .$_POST['name']    ."<br><br>\n";
$msg .= "EMAIL: "  .$_POST['email']    ."<br><br>\n";
$msg .= "WEBSITE: "  .$_POST['website']    ."<br><br>\n";
$msg .= "MESSAGE: "  .$_POST['message']    ."<br>\n";

//Headers
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";


$mail="support@mysite.com";

//send mail
//mail($mail, $subject, $msg, $headers, "-f $from");
send_mail($from, $_POST['name'], $msg);

?>

【问题讨论】:

  • 您的答案中的“但它没有用”没有帮助。请以简化版本添加您尝试过的代码,以便您可以将其添加到问题本身中(您的问题下方有一个编辑按钮)。当然,该库有效,您必须找出您犯了什么错误。如果您出示您的代码,我们只能提供帮助。
  • 我已经添加了我在我的问题中使用的代码,很抱歉我没有在第一次发布它。
  • 好的,现在我们需要知道您实际遇到了什么错误。同样“但它没有用”没有帮助,我们需要一个特定的错误消息。
  • 我的猜测是库无法连接到 smtp 服务器。您将“localhost”配置为 SMTP 服务器...您确定该系统上运行着 SMTP 服务器吗?并且您拥有正确的身份验证凭据?

标签: php function email security smtp


【解决方案1】:

首先,您必须包含使用 PHP 邮件程序发送邮件的所有要求

require 'assets/PHPMailer/PHPMailer/src/Exception.php';
require 'assets/PHPMailer/PHPMailer/src/OAuth.php';
require 'assets/PHPMailer/PHPMailer/src/PHPMailer.php';
require 'assets/PHPMailer/PHPMailer/src/POP3.php';
require 'assets/PHPMailer/PHPMailer/src/SMTP.php';
require('assets/PHPMailer/simple_html_dom.php');

在您定义设置之后,这是我使用的配置:(我使用 gmail 发送邮件,要使用 gmail,您必须在您的 gmail 中启用配置才能使用不太安全的应用程序)

$mailSub = filter_input('insert mail subject here');
$mailMsg = $html_new;
$mailto = 'inset mail you wish to send here';
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->IsSmtp();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->IsHTML(true);
$mail->CharSet = 'UTF-8';

// LOGIN INFO TO YOUR GMAIL
$mail->Username = 'gmail';
$mail->Password = 'password for gmail';
$mail->SetFrom('name you wish to show as sender');
//-------------------------------------------

$mail->Subject = 'subject';
$mail->Body = 'body of a mail, you can use html here';
$mail->AddAddress('reciever mail');
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
         )
    );
$mail->Send()

这是我的 github 存储库的 link,其中包含使用 php 邮件程序的完整应用程序,也许会有所帮助。

【讨论】:

    【解决方案2】:

    本质上,这一切都归结为了解您的共享托管服务提供商为您提供的环境。

    由于他们禁用了 php 的 mail() 功能,我认为他们试图不必处理使用他们的服务的垃圾邮件发送者。

    所以他们可能也不会在 localhost 上运行 SMTP 服务,并且很可能会过滤掉到端口 25 的传出流量,以防止您也将其传递到其他邮件服务器上。但再说一遍:他们可能还没有(还)。

    但值得检查一下可用的内容:

    • 本地主机上是否有 SMTP 服务运行?
    • 他们是否为合法客户提供任何传出中继 SMTP 服务?
    • 他们是否过滤端口 25 上的传出 SMTP 到世界其他地方?
    • 它们是否允许您连接到经过身份验证的 SMTP 服务以进行传送?

    这需要做一些工作,如何获得答案很大程度上取决于您获得的服务有多少以及您在互联网上拥有哪些其他资源。无论如何,最简单的方法是简单地询问您的供应商:他们知道他们允许什么,他们阻止什么以及他们接下来想要做什么,这取决于他们试图摆脱垃圾邮件发送者的位置。

    无论如何,您最好的选择是使用经过身份验证的交付到具有 gmail 左右目标地址的谷歌服务器。这是最不可能被谷歌或知道他们做什么的共享托管服务提供商过滤掉的。注意:经过身份验证的交付意味着网络服务器有一种向 google 进行身份验证的方法,因此,如果不同客户之间的分离不是最理想的(到目前为止并不总是万无一失的),那么您在共享主机中的“邻居”可以相对轻松地获得这些凭据,因此请确保它不是您非常关心的帐户 - 因此:创建一个仅用于该用途的 gmail 地址...

    如果他们不允许任何事情。您仍然可以将电子邮件保存在服务器上,从桌面或其他服务器检索它,然后通过一些编程从那里发送。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多