需要在我的PHP表单中进行SMTP身份验证


Need SMTP authentication in my PHP form?

我创建了一个表单,它不会发送电子邮件。我联系了我的主机,他说我需要SMTP身份验证。表单需要发送预订信息。

这是我的reservation.php文件:

<script>
/////////////////// RESERVATION FORM //////////////////////
        $("#ajax-contact-form").submit(function(){ 
            var str = $(this).serialize();
            document.getElementById('submit').disabled=true;
            document.getElementById('submit').value='PLEASE WAIT';
            $.ajax({ 
                type: "POST",
                url: "apartments_reservation_send.php",
                data: str,
                success: function(msg){ 
                    $("#note").ajaxComplete(function(event, request, settings){ 
                        if(msg == 'OK') 
                        { 
                            result = '<div class="notification_ok">Thank you!<br />Your request is successfully sent!</div>';
                            $("#fields").hide();
                        }
                        else 
                        { 
                            document.getElementById('submit').disabled=false;
                            document.getElementById('submit').value='Send request';
                            result = msg;
                            autoReinitialise: true;
                        } 
                        $(this).html(result);
                    });
                }
            });
            return false;
        });
</script>
<form id="ajax-contact-form" action="javascript:alert('success!');"> 
                            <table width="100%" cellpadding="3" cellspacing="3">
                                <tr>
                                    <td width="50%" align="right" style="text-align: right;">
                                        Arrival Date<span class="REQ">*</span> &rarr; <input id="arrivalDate" name="arrivalDate" size="30" type="text" class="date-pick" /> 
                                    </td>
                                    <td width="50%" align="left" style="text-align: left;">
                                        <input id="departureDate" name="departureDate" size="30" type="text" class="date-pick" />
                                        &larr; <span class="REQ">*</span>Departure Date
                                    </td>
                                </tr>
                                <tr>
                                    <td width="50%" align="right" style="text-align: right;">
                                        Adults<span class="REQ">*</span> &rarr; 
                                        <select id="Adults" name="Adults"> 
                                            <option value=""></option>
                                            <option value="0">0</option>
                                            <option value="1">1</option> 
                                            <option value="2">2</option> 
                                            <option value="3">3</option> 
                                            <option value="4">4</option> 
                                        </select>
                                    </td>
                                    <td width="50%" align="left" style="text-align: left;">
                                        <select id="Children" name="Children"> 
                                            <option value=""></option>
                                            <option value="0">0</option>
                                            <option value="1">1</option> 
                                            <option value="2">2</option> 
                                            <option value="3">3</option> 
                                            <option value="4">4</option> 
                                        </select>
                                        &larr; <span class="REQ">*</span>Children
                                    </td>
                                </tr>
                            </table>
                            <table width="100%" cellpadding="3" cellspacing="3">
                                <tr>
                                    <td width="25%" align="right" valign="middle" style="text-align: right;">Name<span class="REQ">*</span> :</td>
                                    <td width="75%" align="left" style="text-align: left;">
                                        <input type="text" id="name" name="name" value="" size="86" /> 
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right" valign="middle" style="text-align: right;">E-mail<span class="REQ">*</span> :</td>
                                    <td align="left" style="text-align: left;">
                                        <input type="text" id="email" name="email" value="" size="86" /> 
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right" valign="middle" style="text-align: right;">Phone<span class="REQ">*</span> :</td>
                                    <td align="left" style="text-align: left;">
                                        <input type="text" id="phone" name="phone" value="" size="86" /> 
                                    </td>
                                </tr>
                                <tr>
                                    <td align="right" style="text-align: right;">Message :</td>
                                    <td align="left" valign="top" style="text-align: left;">
                                        <textarea id="message" name="message" rows="5" cols="87"></textarea> 
                                    </td>
                                </tr>
                                <tr>
                                    <td width="100%" align="center" style="text-align: center;" colspan="2">
                                        <input class="button" type="submit" name="submit" id="submit" value="Send request" />
                                    </td>
                                </tr>
                            </table>
                        </form>

这是我的reservarian_send.php:

<?php 
$TO_EMAIL   = "info@thebunchofgrapesinn.com";
$FROM_EMAIL = "info@thebunchofgrapesinn.com";
$FROM_NAME  = "thebunchofgrapes.com";
$SUBJECT    = "The Bunch Og Grapes - Apartment Reservation";
error_reporting (E_ALL ^ E_NOTICE);
$post = (!empty($_POST)) ? true : false;
if($post)
{
    include 'functions.php';
    $ARIVAL_DATE        = trim($_POST['arrivalDate']); 
    $DEPARTURE_DATE     = trim($_POST['departureDate']); 
    $ADULTS             = trim($_POST['Adults']); 
    $CHILDREN           = trim($_POST['Children']); 
    $EMAIL              = trim($_POST['email']);
    $PHONE              = trim($_POST['phone']); 
    $NAME               = stripslashes($_POST['name']);
    $MESSAGE            = stripslashes($_POST['message']);
    $ERROR = '';
    if(!$ARIVAL_DATE) 
    {
        $ERROR .= 'Please enter Arrival Date<br />';
    }
    if(!$DEPARTURE_DATE) 
    {
        $ERROR .= 'Please enter Departure Date<br />';
    }
    //if(!$ADULTS) 
    //{
        //$ERROR .= 'Please pick number of Adults<br />';
    //}
    //if(!$CHILDREN) 
    //{
        //$ERROR .= 'Please pick number of Children<br />';
    //}
    if(!$NAME) 
    {
        $ERROR .= 'Please enter Your Name.<br />';
    }
    if(!$EMAIL) 
    {
        $ERROR .= 'Please enter Email address.<br />';
    }
    if($EMAIL && !ValidateEmail($EMAIL)) 
    {
        $ERROR .= 'Please enter valid Email address.<br />';
    }
    if(!$PHONE) 
    {
        $ERROR .= 'Please enter You Phone Number.<br />';
    }
    //if(!$MESSAGE || strlen($MESSAGE) < 15) {
        //$ERROR .= "Molimo unesite poruku. <br />Poruka mora imati najmanje 15 karaktera.<br />";
    //}
    
    $FULL_MESSAGE = "ARIVAL DATE = $ARIVAL_DATE'nDEPARTURE DATE = $DEPARTURE_DATE'nADULTS = $ADULTS'nCHILDREN = $CHILDREN'nNAME = $NAME'nEMAIL = $EMAIL'nPHONE = $PHONE'nMESSAGE = $MESSAGE";
    
    if(!$ERROR)
    {
        $mail = mail($TO_EMAIL, $SUBJECT, $FULL_MESSAGE,
             "From: ".$FROM_NAME." <".$FROM_EMAIL.">'r'n"
            ."Reply-To: ".$FROM_EMAIL."'r'n"
            ."X-Mailer: PHP/" . phpversion());
        if($mail) {
            echo 'OK';
        }
    }
    else {
        echo '<div class="notification_error">'.$ERROR.'</div>';
    }
}
?>

这是网页的链接http://thebunchofgrapesinn.com/apartments_reservation

我不知道如何添加SMTP身份验证,这里有什么问题,有人能帮忙吗?

php的mail()函数的行为因服务器操作系统而异。Windows没有像基于Unix的服务器那样内置的非SMTP选项。CCD_ 2在一般情况下也受到限制,而没有使用报头的一些高级知识。

如果在这里推荐一个适合这份工作的工具是合适的,PHPMailer是一个足够方便的从php发送电子邮件的goto解决方案。如果您的服务器是基于Unix/Linux的,则可以省略$mail->isSMTP()和相关选项,PHPMailer将使用服务器的sendmail实现。如果你在Windows上,或者手头有SMTP详细信息,PHPMailer就足够简单了。

您可以使用PHPMailer和Swiftmailer,它们是发送smtp邮件的常用库。PhpMailer比swift简单一点,文档也很容易理解。

但是您可以为此编写自己的smtp客户端,但首先您需要学习如何在php中建立套接字连接。PHPMailerssmtp类是创建一个很好的提示。

如果你有服务器的管理员权限,你可以将你的sendmail邮件功能连接到smtp服务器,这里有一个如何操作的文档。Php有smtp的邮件配置选项,尽管我以前从未使用过它。

顺便说一下,php.ini有一个sendmail_path选项来读取STDOUT数据并发送邮件。如果需要,可以使用bash、php或python脚本更改此sendmail_path参数。但我不推荐。

大多数主机都已配置SMTP
为了分别调试mail()函数。只需制作一个类似"mail.php"的文件,并将以下代码放入其中:

    <?php
         $email   ="PUT EMAIL ID OF USER HERE";      
    
        $subject ="Reservation Info";
    
        $headers = "From: " . '<thebunchofgrapesinn.com/>' . "'r'n";
        $headers .= "Reply-To: ". $email . "'r'n";
        $headers .= "MIME-Version: 1.0'r'n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1'r'n";
    
     $message = "<html>
        <body>
          <p>Its Just A Testing Mail</p>
        </body>
        </html>";
    if(mail($email,$subject, $message, $headers)){
      echo 'mail sent';
    }
?>

检查它是否工作
也更喜欢使用phpmailer
这是下载PHPmailer类的链接,它也有示例。