繁体   English   中英

PHP / HTML表单数据将作为电子邮件从我的GMAIL帐户发送

[英]PHP/HTML form data to send as an email from my GMAIL account

当有人在我的网页上填写表格时,我正在尝试向自己发送电子邮件。 我的表单看起来像这样:

    <form id="contactForm" action="#" method="post">
                <fieldset>                      
                    <p>
                        <label for="name" >Name</label>
                        <input name="name"  id="name" type="text" class="form-poshytip" title="Enter your full name" />
                    </p>
                    <p>
                        <label for="email" >Email</label>
                        <input name="email"  id="email" type="text" class="form-poshytip" title="Enter your email address" />
                    </p>
                    <p>
                        <label for="web">Website</label>
                        <input name="web"  id="web" type="text" class="form-poshytip" title="Enter your website" />
                    </p>
                    <p>
                        <label for="comments">Message</label>
                        <textarea  name="comments"  id="comments" rows="5" cols="20" class="form-poshytip" title="Enter your comments"></textarea>
                    </p>
                    <!-- send mail configuration -->
                    <input type="hidden" value=EMAIL" name="to" id="to" />
                    <input type="hidden" value="Email received from Website" name="subject" id="subject" />
                    <input type="hidden" value="send-mail.php" name="sendMailUrl" id="sendMailUrl" />
                    <!-- ENDS send mail configuration -->

                    <p><input type="button" value="Send" name="submit" id="submit" /> <span id="error" class="warning">Message</span></p>
                </fieldset>

            </form>

和PHP我看起来像这样:

<?php
//vars
$subject = $_POST['subject'];
$to = explode(',', $_POST['to'] );

$from = $_POST['email'];

//data
$msg = "NAME: "  .$_POST['name']    ."<br>\n";
$msg .= "EMAIL: "  .$_POST['email']    ."<br>\n";
$msg .= "WEBSITE: "  .$_POST['web']    ."<br>\n";
$msg .= "COMMENTS: "  .$_POST['comments']    ."<br>\n";

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

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'EMAIL',
        'password' => 'PASSWORD'
    ));

$mail = $smtp->send($to, $headers, $msg);
?>

EMAIL和PASSWORD被替换为值....

任何人都可以建议做什么?

将主机更新为smtp.gmail.com并将端口更新为587并使用结果更新我们。

编辑(一体化)

PHP - 和HTML一起 (并用您自己的SMTP替换mail()函数)

即:

$mail = $smtp->send($to, $subject, $msg, $headers);

新代码:

<?php
//vars

if(isset($_POST['submit'])){
$subject = $_POST['subject'];

$to = "email@example.com";

$from = $_POST['email'];

//data
$msg = "NAME: "  .$_POST['name']    ."<br>\n";
$msg .= "EMAIL: "  .$_POST['email']    ."<br>\n";
$msg .= "WEBSITE: "  .$_POST['web']    ."<br>\n";
$msg .= "COMMENTS: "  .$_POST['comments']    ."<br>\n";

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

// insert with your SMTP

mail ($to, $subject,$msg, $headers); 
echo "sent";
}
?>


<form id="contactForm" action="" method="post">
    <fieldset>                      
        <p>
            <label for="name" >Name</label>
            <input name="name"  id="name" type="text" class="form-poshytip" title="Enter your full name" />
        </p>
        <p>
            <label for="email" >Email</label>
            <input name="email"  id="email" type="text" class="form-poshytip" title="Enter your email address" />
        </p>
        <p>
            <label for="web">Website</label>
            <input name="web"  id="web" type="text" class="form-poshytip" title="Enter your website" />
        </p>
        <p>
            <label for="comments">Message</label>
            <textarea  name="comments"  id="comments" rows="5" cols="20" class="form-poshytip" title="Enter your comments"></textarea>
        </p>
        <!-- send mail configuration -->
        <input type="hidden" value="Email received from Website" name="subject" id="subject" />

        <!-- ENDS send mail configuration -->

        <p><input type="submit" value="Send" name="submit" id="submit" /> <span id="error" class="warning">Message</span></p>
    </fieldset>

</form>

原始答案

您的代码存在很多问题。

你的参数是关闭的($to, $headers, $msg)标题是最后的, $subject不包括在内; 它必须在那里。

语法是($to, $subject,$msg, $headers)

它是TO,然后是Subject,然后是Message,然后是Headers。 根据the mail() manual即使您使用SMTP, 邮件也是邮件。

我不知道你为什么这样做:

<input type="hidden" value="send-mail.php" name="sendMailUrl" id="sendMailUrl" />

只需在表单的action=设置它

这对我有用:你可以替换:

mail ($to, $subject, $msg, $headers);

(如果它适用于你)似乎还有其他答案。

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => 'EMAIL',
        'password' => 'PASSWORD'
    ));

$mail = $smtp->send($to, $headers, $msg);

PHP - 测试 (send-mail.php)

<?php
//vars

if(isset($_POST['submit'])){
$subject = $_POST['subject'];

$to = "email@example.com";

$from = $_POST['email'];

//data
$msg = "NAME: "  .$_POST['name']    ."<br>\n";
$msg .= "EMAIL: "  .$_POST['email']    ."<br>\n";
$msg .= "WEBSITE: "  .$_POST['web']    ."<br>\n";
$msg .= "COMMENTS: "  .$_POST['comments']    ."<br>\n";

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

mail ($to, $subject,$msg, $headers);
echo "sent";
}
?>

HTML表单

<form id="contactForm" action="send-mail.php" method="post">
    <fieldset>                      
        <p>
            <label for="name" >Name</label>
            <input name="name"  id="name" type="text" class="form-poshytip" title="Enter your full name" />
        </p>
        <p>
            <label for="email" >Email</label>
            <input name="email"  id="email" type="text" class="form-poshytip" title="Enter your email address" />
        </p>
        <p>
            <label for="web">Website</label>
            <input name="web"  id="web" type="text" class="form-poshytip" title="Enter your website" />
        </p>
        <p>
            <label for="comments">Message</label>
            <textarea  name="comments"  id="comments" rows="5" cols="20" class="form-poshytip" title="Enter your comments"></textarea>
        </p>
        <!-- send mail configuration -->
        <input type="hidden" value="Email received from Website" name="subject" id="subject" />

        <!-- ENDS send mail configuration -->

        <p><input type="submit" value="Send" name="submit" id="submit" /> <span id="error" class="warning">Message</span></p>
    </fieldset>

</form>

脚注:

缺少引用value=EMAIL"但在我的PHP中已被替换为:

$to = "email@example.com";

这是一种便宜而简单的方法。

在你的php.ini中替换mail函数的相关部分

[mail function]
; For Win32 only.
SMTP = smtp.gmail.com
smtp_port = 587

; For Win32 only.
sendmail_from = EMAILADDRESSHERE

用send替换sendmail.ini

[sendmail] 
smtp_server=smtp.gmail.com

smtp_port=587

error_logfile=error.log

auth_username=EMAILADDRESSHERE
auth_password=PASSWORDHERE

force_sender=EMAILADDRESSHERE

然后在您的代码中,发送一封相同的电子邮件,除非将其写为

 mail($to, $subject, $msg, $headers)

或修改以适应。

您必须首先检查变量$ to的值是否是正确的邮件方向。 根据您发布的代码可能会出错。

在PHP代码上,您调用类Mail但不包含/ require,添加:

// Pear Mail Library
require_once "Mail.php";

发送邮件后,您无法显示结果:

if (PEAR::isError($mail)) {
    echo('<p>' . $mail->getMessage() . '</p>');
} else {
    echo('<p>Message successfully sent!</p>');
}

首先,检查邮箱中的垃圾邮件。 如果gmail收到了你的邮件,它必须在那里。 如果没有,请检查您的邮件服务器配置以及是否有权为您的域发送邮件。 您还可以检查邮件服务器日志以查找潜在问题。

无论如何,我建议你使用MailjetMailChimp等解决方案。 您可以注册基本套餐并收到电子邮件。 这样的解决方案的优点是您不需要维护您的邮件服务器,您可以检查每个正在处理的邮件的状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM