Как отправить счет по электронной почте, используя JavaScript? - PullRequest
0 голосов
/ 31 марта 2020

Я занимаюсь разработкой веб-сайта с магазином, код магазина - JavaScript (VanillaCart JS), и у меня есть пользователь, оплачивающий PayPal. Я надеялся, что PayPal скажет пользователю, какой товар и сколько он заказал, но я смог получить его только для того, чтобы выставить ему правильную сумму.

Файл JS называется корзиной. js, а функция добавления товаров в корзину:

function insertItemToDOM(product) {
    cartDOM.insertAdjacentHTML('beforeend', `
    <div class="cart__item">
      <img class="cart__item__image" src="${product.image}" alt="${product.name}">
      <h3 class="cart__item__name">${product.name}</h3>
      <h3 class="cart__item__price">${product.price}</h3>
      <button class="btn btn--primary btn--small${(product.quantity === 1 ? ' btn--danger' : '')}" data-action="DECREASE_ITEM">&minus;</button>
      <h3 class="cart__item__quantity">${product.quantity}</h3>
      <button class="btn btn--primary btn--small" data-action="INCREASE_ITEM">&plus;</button>
      <button class="btn btn--danger btn--small" data-action="REMOVE_ITEM">&times;</button>
    </div>
  `);

    addCartFooter();
}

Я также сохраняю корзину в локальном хранилище, и я думая, что если я смогу сохранить его, я могу отправить его по электронной почте клиенту, код для этого также как и функция 'countCartTotal ()':

function countCartTotal() {
    let cartTotal = 0;
    cart.forEach(cartItem => cartTotal += cartItem.quantity * cartItem.price);
    document.querySelector('[data-action="CHECKOUT"]').innerText = `Pay $${cartTotal}`;
    return cartTotal;
}

function saveCart() {
    localStorage.setItem('cart', JSON.stringify(cart));
    countCartTotal();
}

У меня есть система забытых паролей, которая использует Почтовый сервис PHP Можно ли запустить код JS в этом письме, и если да, то как мне это сделать?

1 Ответ

0 голосов
/ 31 марта 2020

Существует несколько опций, которые вы можете использовать:

  • Отправка электронной почты с использованием сервера smtp, например authsmtp (paired)

  • Отправка электронной почты используя API-сервис, такой как mailgun (paied)

  • Отправка электронной почты с помощью amazon SES

  • Отправка электронной почты с использованием собственного сервера с использованием sendmail, mail .. (требуется дополнительная настройка)

Во многих случаях при использовании общего хостинга почтовый сервер уже настроен и доступен, поэтому вы можете использовать функцию mail в php для отправки вашей электронной почты, но прежде чем приступить к работе, вам необходимо убедиться, что электронные письма не отправляются в папку спама, если это так, используйте authsmtp, поскольку его легко настроить (может потребоваться PHPMailer).

Процесс, который Нужно будет выглядеть так:

Отправьте запрос из внешнего интерфейса (Javascript Ajax или HTML)

Javascript Ajax (jQuery)

$.post("/sendmail", { to: "abcd@gmail.com" })

Или с использованием html форма

<form action="/sendmail" method="post">
  <input type="text" name="to" />
  <input type="submit" value="Subscribe" />
</form>

На вашем php бэкенде с использованием mail может потребоваться установка smtp / sendmail на ваш сервер обычно в случае с общим хостингом функция:

$to = $_POST["to"];

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
  $headers = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

  mail($to, "SUBJECT", "CONTENT OF THE EMAIL");
}

Использование службы authsmtp с PHPMailer

date_default_timezone_set('Etc/UTC');

require '../PHPMailerAutoload.php';

$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 0;
$mail->Debugoutput = 'html';
$mail->Host = "mail.authsmtp.com";
$mail->Port = 2525;
$mail->SMTPAuth = true;
$mail->SMTPAutoTLS = false;
$mail->SMTPSecure = ''; // To enable TLS/SSL encryption change to 'tls'
$mail->AuthType = "CRAM-MD5";
$mail->Username = "USERNAME";
$mail->Password = "PASSWORD";
$mail->setFrom('YOU@YOUR-DOMAIN-NAME.COM', 'YOUR NAME');
$mail->addReplyTo('YOU@YOUR-DOMAIN-NAME.COM', 'YOUR NAME');
$mail->addAddress('YOU@YOUR-DOMAIN-NAME.COM', 'YOUR NAME'); //(Send the test to yourself)
$mail->Subject = 'PHPMailer SMTP test';
$mail->isHTML(true);
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if (!$mail->send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
} else {
    echo "Message sent!";
}
...