Возникают проблемы с установкой прямой электронной почты с phpmailer и sendgrid - PullRequest
0 голосов
/ 11 февраля 2019

Я просматривал тонны вещей в Интернете, но все еще не могу получить кнопку «Отправить», чтобы отправить электронное письмо с помощью PHPMailer и Sendgrid.Вот мой код:

HTML

            <form id="contact-form" action="scripts/mailer.php" method="post">
                <fieldset form="#contact-form">
                    <legend>Contact Form</legend>
                    <label class="input-field-name">Name:<br />
                        <input class="input-field" type="text" name="name" required/>
                    </label><br />
                    <label class="input-field-name">Email:<br />
                        <input class="input-field" type="text" name="email" required/>
                    </label><br />
                    <label class="input-field-name">Message Title:<br />
                        <input class="input-field" type="text" name="header" required/>
                    </label><br />
                    <label class="input-field-name">Message:<br />
                        <textarea class="message-field" type="text" name="message" required></textarea>                            
                    </label><br />
                    <button id="submit-button" type="submit">Submit</button>
                </fieldset>
            </form>

PHP

<?php

$name = $_POST["name"];
$email = $_POST["email"];
$header = $_POST["header"];
$message = $_POST["message"];

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require "C:\xampp\composer\vendor\autoload.php";

$mail = new PHPMailer(TRUE);

try {
    $mail->setFrom($email, $name);
    $mail->addAddress("MY EMAIL", "MY NAME");
    $mail->Subject($header);
    $mail->isHTML(True);
    $mail->Body = ("<html>$message</html");
    $mail->AltBody = strip_tags($message);

    $mail->SMTPDebug = 1;
    $mail->isSMTP();
    $mail->Host = 'smtp.sendgrid.net';
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'tls';
    $mail->Username = "MY SENDGRID USERNAME";
    $mail->Password = "MY SENDGRID PASSWORD";
    $mail->Port = 587;

    $mail->SMTPOptions = array(
      'ssl' => array(
      'verify_peer' => false,
      'verify_peer_name' => false,
      'allow_self_signed' => true
      )
    );

    $mail->send();
} catch (Exception $e) {
    echo $e->errorMessage();
} catch (\Exception $e) {
    echo $e->getMessage();
}

?>

Я очень новичок в этом, поэтому я, вероятно, допустил много ошибок.Я использую xampp и установил PHPMailer и Sendgrid в папку поставщика xampp с помощью Composer.Я создал учетную запись sendgrid и создал API-ключ, но не уверен, как его использовать.Я также не уверен в том, как я связал кнопку «Отправить» с contact.php в HTML, и я получаю сообщение об ошибке «не удается POST scripts / contact.php».

Здесь есть несколько проблемтак вот мои вопросы:

  • Правильно ли PHP для этого процесса?
  • Правильно ли я связал PHP с кнопкой «Отправить»?
  • Как сделатьЯ избегаю ошибок «not POST»?
  • Загружается ли Sendgrid из терминала с помощью 'composer require sendgrid / sendgrid', а затем достаточно задать хост как smtp.sendgrid.net, чтобы запустить его с Sendgrid?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Попробуйте следующий код

require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;

$mail->isSMTP();  
$mail->SMTPDebug = 0;                                 // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';                       // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'XXXXX@gmail.com';               // SMTP username
$mail->Password = 'XXXXXXXXX';                    // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                               // TCP port to connect to gmail 465/587/995/993

$mail->setFrom('XXXXX@gmail.com', 'XXXXXX');
$mail->addAddress('XXXXX@gmail.com', 'XXXXXX');     // Add a recipient
// $mail->addAddress('XXX@example.com');               // Name is optional
$mail->addReplyTo('XXX@gmail.com', 'XXXXXXXX');
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
   // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Testing';

$name=$_POST['name'];
$email=$_POST['email'];
$message=$_POST['message'];

$mail->Body    = 'Name:'.$name ."<br/>".
                 'Email:' .$email."<br/>".
                 'Message:'  .$message;
// $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("Thank You..");
}
0 голосов
/ 11 февраля 2019
require 'PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;

$mail->isSMTP();  
$mail->SMTPDebug = 0;                                 // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';                       // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'XXXXX@gmail.com';               // SMTP username
$mail->Password = 'XXXXXXXXX';                    // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                               // TCP port to connect to gmail 465/587/995/993

$mail->setFrom('XXXXX@gmail.com', 'XXXXXX');
$mail->addAddress('XXXXX@gmail.com', 'XXXXXX');     // Add a recipient
// $mail->addAddress('XXX@example.com');               // Name is optional
$mail->addReplyTo('XXX@gmail.com', 'XXXXXXXX');
// $mail->addCC('cc@example.com');
// $mail->addBCC('bcc@example.com');
   // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Testing';

$name=$_POST['name'];
$email=$_POST['email'];
$message=$_POST['message'];

$mail->Body    = 'Name:'.$name ."<br/>".
                 'Email:' .$email."<br/>".
                 'Message:'  .$message;
// $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("Thank You..");
}
...