【问题标题】:PHPMailer. How to add form data in the body of the messagePHP邮件程序。如何在邮件正文中添加表单数据
【发布时间】:2019-09-16 13:48:06
【问题描述】:

表单提交基于 PHPMailer 库(版本 6.0.7) 我希望将表单数据(例如 userName、userPhone 和 userEmail)添加到邮件的标题中。如何在消息正文中添加表单数据。例如:

用户名

用户电话

用户邮箱

留言内容

在我的示例中应该是什么样子?

PHP

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


if(!empty($_POST["send"])) {
    require_once ('vendor/autoload.php');

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPDebug = 0;
    $mail->SMTPAuth = TRUE;

    $mail->Port = 465;

    $mail->Username = "**********";
    $mail->Password = "**********";

    $mail->Mailer = "smtp";
    $mail->CharSet = "UTF-8"; 

    if (isset($_POST["userEmail"])) {
        $userEmail = $_POST["userEmail"];
    }
    if (isset($_POST["userName"])) {
        $userName = $_POST["userName"];
    }
    if (isset($_POST["userPhone"])) {
        $userPhone = $_POST["userPhone"];
    }   
    if (isset($_POST["subject"])) {
        $subject = $_POST["subject"];
    }
    if (isset($_POST["userMessage"])) {
        $message = $_POST["userMessage"];
    }
    $mail->SetFrom("my email"); 
    $mail->AddReplyTo($userEmail, $userName);
    $mail->AddAddress("my email");

    $mail->Subject = $subject;
    $mail->WordWrap = 80;
    $mail->MsgHTML($message);

    $mail->IsHTML(true);

    $mail->SMTPSecure = 'ssl';
    $mail->Host = '**********';

    if (! empty($_FILES['attachment'])) {
        $count = count($_FILES['attachment']['name']);
        if ($count > 0) {

            for ($i = 0; $i < $count; $i ++) {
                if (! empty($_FILES["attachment"]["name"])) {

                    $tempFileName = $_FILES["attachment"]["tmp_name"][$i];
                    $fileName = $_FILES["attachment"]["name"][$i];
                    $mail->AddAttachment($tempFileName, $fileName);
                }
            }
        }
    }
    if (! $mail->Send()) {
        $message = "Ups :( Error";
        $type = "error";
    } else {

        $message = "Successfull";
        $type = "success";
    }
}

?>

HTML 和 JavaScript

<?php
require_once "mail-sending-script.php";
?>
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<link href="style.css" rel="stylesheet" type="text/css" />
<title>PHP Contact Form with Add More File Attachment Option</title>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"
    type="text/javascript"></script>
<script type="text/javascript">
        function validate() {
            var valid = true;

            $(".info").html("");
            var userName = document.forms["mailForm"]["userName"].value;
            var userPhone = document.forms["mailForm"]["userPhone"].value;
            var userEmail = document.forms["mailForm"]["userEmail"].value;
            var subject = document.forms["mailForm"]["subject"].value;
            var userMessage = document.forms["mailForm"]["userMessage"].value;

            if (userName == "") {
                $("#userName-info").html("(required)");
                $("#userName").css('background-color', '#FFFFDF');
                valid = false;
            }

            if (userPhone == "") {
                $("#userPhone-info").html("(required)");
                $("#userPhone").css('background-color', '#FFFFDF');
                valid = false;
            }
            if (userEmail == "") {
                $("#userEmail-info").html("(required)");
                $("#userEmail").css('background-color', '#FFFFDF');
                valid = false;
            }
            if (!userEmail.match(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/))
            {
                $("#userEmail-info").html("(invalid)");
                $("#userEmail").css('background-color', '#FFFFDF');
                valid = false;
            }

            if (subject == "") {
                $("#subject-info").html("(required)");
                $("#subject").css('background-color', '#FFFFDF');
                valid = false;
            }
            if (userMessage == "") {
                $("#userMessage-info").html("(required)");
                $("#userMessage").css('background-color', '#FFFFDF');
                valid = false;          
            }

            return valid;
        }

        function addMoreAttachment() {
            $(".attachment-row:last").clone().insertAfter(".attachment-row:last");
            $(".attachment-row:last").find("input").val("");
        }
</script>
</head>

<body>
    <h1>PHP Contact Form with Add More File Attachment Option</h1>

    <div class="attachment-form-container">
        <form name="mailForm" id="mailForm" method="post" action=""
            enctype="multipart/form-data" onsubmit="return validate()">

            <div class="input-row">
                <label style="padding-top: 20px;">Name</label> <span
                    id="userName-info" class="info"></span><br /> <input
                    type="text" class="input-field" name="userName"
                    id="userName" />
            </div>

            <div class="input-row">
                <label>Telefon</label> <span id="telefon-info"
                    class="info"></span><br /> <input type="text"
                    class="input-field" name="telefon" id="telefon" />
            </div>

            <div class="input-row">
                <label>Email</label> <span id="userEmail-info"
                    class="info"></span><br /> <input type="text"
                    class="input-field" name="userEmail" id="userEmail" />
            </div>

            <div class="input-row">
                <label>Subject</label> <span id="subject-info"
                    class="info"></span><br /> <input type="text"
                    class="input-field" name="subject" id="subject" />
            </div>              

            <div class="input-row">
                <label>Message</label> <span id="userMessage-info"
                    class="info"></span><br />
                <textarea name="userMessage" id="userMessage"
                    class="input-field" id="userMessage" cols="60"
                    rows="6"></textarea>
            </div>
            <div class="attachment-row">
                <input type="file" class="input-field"
                    name="attachment[]">

            </div>

            <div onClick="addMoreAttachment();"
                class="icon-add-more-attachemnt"
                title="Add More Attachments">
                <img src="icon-add-more-attachment.png"
                    alt="Add More Attachments">
            </div>
            <div>
                <input type="submit" name="send" class="btn-submit"
                    value="Wyślij" />

                <div id="statusMessage"> 
                        <?php
                        if (! empty($message)) {
                            ?>

                            <p class='<?php echo $type; ?>Message'><?php echo $message; ?></p>
                        <?php
                        }
                        ?>
                    </div>
            </div>
        </form>
    </div>

</body>
</html>

【问题讨论】:

    标签: javascript php phpmailer


    【解决方案1】:

    看起来您已经从一个非常古老的示例中改编了这段代码。

    组合消息正文的最简单方法是使用 heredoc(注意缩进文档中的 cmets):

    $mail->isHTML(false);
    $mail->Body = <<<EOT;
    Name: $userName
    Phone: $userPhone
    Email: $userEmail
    Message: $message
    EOT;
    

    由于您的内容不是 HTML,因此使用 msgHTML() 毫无意义;直接设置Body,并禁用HTML,就像这个例子一样。

    另一个问题是您的文件上传处理代码不安全。废弃它并使用the multiple file upload example provided with PHPMailer 中的代码重新开始。

    【讨论】:

      【解决方案2】:

      提交以下表单时出现以下错误:

      语法错误,意外'

      语法错误,意外 (T_STRING)**

      我的目标是让提交操作生效。在提交工作后,我想在表单中添加一个recaptcha。我尝试了以下方法:

         use PHPMailer\PHPMailer\PHPMailer; 
          use PHPMailer\PHPMailer\Exception; 
          
          
          if(!empty($_POST["send"])) {
              require_once ('vendor/autoload.php');
              
              $mail = new PHPMailer();
              $mail->IsSMTP();
              $mail->SMTPDebug = 0;
              $mail->SMTPAuth = TRUE;
              
              $mail->Port = 465;
              
              $mail->Username = "********";
              $mail->Password = "*******";
              
              $mail->Mailer = "smtp";
              $mail->CharSet = "UTF-8"; 
              
              if (isset($_POST["userEmail"])) {
                  $userEmail = $_POST["userEmail"];
              }
              if (isset($_POST["userName"])) {
                  $userName = $_POST["userName"];
              }
              if (isset($_POST["userPhone"])) {
                  $userPhone = $_POST["userPhone"];
              }   
              if (isset($_POST["subject"])) {
                  $subject = $_POST["subject"];
              }
              if (isset($_POST["userMessage"])) {
                  $message = $_POST["userMessage"];
              }
              $mail->SetFrom("my email"); 
              $mail->AddReplyTo($userEmail, $userName);
              $mail->AddAddress("my emaill");
              
              $mail->Subject = $subject;
              $mail->WordWrap = 80;
              
             $mail->isHTML(false);
             $mail->Body = <<<EOT;
             
              Name: $userName
              Phone: $userPhone
              Email: $userEmail
              Message: $message
              EOT;
              
              $mail->SMTPSecure = 'ssl';
              $mail->Host = '*********';
              
              for ($ct = 0; $ct < count($_FILES['userfile']['tmp_name']); $ct++) {
              $tempFileNamee = tempnam(sys_get_temp_dir(), hash('sha256', $_FILES['userfile']['name'][$ct]));
              $filename = $_FILES['userfile']['name'][$ct];
              if (move_uploaded_file($_FILES['userfile']['tmp_name'][$ct], $tempFileName)) {
                  $mail->addAttachment($$tempFileName, $filename);
              } else {
                  $$message .= 'Failed to move file to ' . $tempFileNamee;
              }
          }
              if (! $mail->Send()) {
                  $message = "Ups :( Error";
                  $type = "error";
              } else {
                  
                  $message = "Successfull";
                  $type = "success";
              }
          }
          
          ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-23
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2016-04-29
        相关资源
        最近更新 更多