【问题标题】:How do I email an invoice using JavaScript?如何使用 JavaScript 通过电子邮件发送发票?
【发布时间】:2020-03-30 21:34:12
【问题描述】:

我正在开发一个包含商店的网站,商店是用 JavaScript (VanillaCartJS) 编码的,我让用户使用 PayPal 付款。我希望 PayPal 会告诉用户他们订购了什么商品以及订购了多少,但我只能得到它以向他们收取正确的金额。

JS 文件名为 cart.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 代码,如果可以,我该怎么做?

【问题讨论】:

  • 你的意思是当用户在他的电子邮件帐户中打开你的邮件时你想运行 jaavscript ?
  • 为什么不创建发票并通过 PHP 发送电子邮件?
  • @BrightFaith 不,我想通过电子邮件向用户发送他们购物车的副本,以便了解他们购买了哪些商品等
  • @devlincarnate 这可行,你能告诉我如何去做吗?
  • @RossCurrie php 有mail function ,通过ajax 将您的数据发送到后端并在后端处理您的邮件

标签: javascript php html-email


【解决方案1】:

您可以使用几个选项:

  • 使用像 authsmtp(付费)这样的 smtp 服务器发送电子邮件

  • 使用 mailgun 之类的 api 服务发送电子邮件(付费)

  • 使用亚马逊 SES 发送电子邮件

  • 使用您自己的服务器使用 sendmail、mail.. 发送电子邮件(需要更多配置)

在许多情况下,当使用共享主机时,邮件服务器已经配置并可用,因此您可以使用 php 中的mail 函数来发送您的电子邮件,但首先在将其投入生产之前,您需要确保电子邮件不会发送到垃圾邮件文件夹,如果是这样,请使用 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");
}

通过 PHPMailer 使用 authsmtp 服务

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!";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2012-03-03
    • 2014-07-01
    • 2016-05-18
    • 1970-01-01
    • 2020-04-17
    • 2019-01-24
    相关资源
    最近更新 更多