【问题标题】:How to send information from SQL table by using phpmailer?如何使用 phpmailer 从 SQL 表中发送信息?
【发布时间】:2017-11-13 13:21:54
【问题描述】:

我有一个 SQL table 显示项目的到期日期,我想每天通过电子邮件发送到期日期的状态,我希望用户知道列出的到期日期更新项目。

我尝试使用this example in phpmailer,通过使用 localhost 并且它有效,但我不知道如何将其与我的案例联系起来。

例如,是否可以这样做$body= include ('sql.php'); 或有其他方法吗?我只对从this table 发送到期日期和到期消息感兴趣,是否可以发送整个表?

这是SQL代码

<?php

 $con=mysqli_connect('localhost','','','arduino');

 if(mysqli_connect_errno($con))
 {
    echo 'Failed to connect:'.mysqli_connect_error();
}
else
    echo 'Connected Successfully!! </br>';
$url=$_SERVER['REQUEST_URI'];
$sql = "SELECT 
    ID,
    Item_Name,
    Expiry_Date,
    CASE 
        WHEN `Expiry_Date` < CURDATE() THEN CONCAT(`Item_Name`,' has EXPIRED already')
        WHEN `Expiry_Date` = CURDATE() THEN CONCAT(`Item_Name`,' will expire today')
        WHEN `Expiry_Date` BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY) THEN CONCAT(`Item_Name`,' will expire tomorrow')
        WHEN `Expiry_Date` > DATE_ADD(CURDATE(), INTERVAL 1 DAY) THEN CONCAT(`Item_Name`,' has not expire yet')
        ELSE 'Error processing expiration date.'
   END AS `Expiration_Message`
FROM
    test;";

    $result = mysqli_query($con,$sql);


    while($row = mysqli_fetch_array($result)){
        echo ($row['Expiration_Message']);
        echo '<br>';
    }

    print_r($row);

    mysqli_close($con);

?>

这是我从 phpmailer 示例中获取的代码

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//Load composer's autoloader
require 'vendor/autoload.php';

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    //$mail->SMTPDebug = 1;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'Smtp.live.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'XXXXX@hotmail.com';                 // SMTP username
    $mail->Password = 'XXXXX';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('XXXXX@hotmail.com', 'Smart Fridge');
    $mail->addAddress('XXXXX@gmail.com', 'Joe');     // Add a recipient
    $body= '<p><td><strong>Hello</strong></td> this is my first email!!!!</p>';

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Expiry Date';
    $mail->Body    = $body;
    $mail->AltBody = strip_tags($body);

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
}

【问题讨论】:

    标签: php mysql phpmailer psql


    【解决方案1】:

    您需要将结果存储到变量中,而不是回显它。

    $mailBody = '';
    
    while($row = mysqli_fetch_array($result)){
        $mailBody .= $row['Expiration_Message'] . "<br>\n";
    }
    

    以后

    $mail->Body    = $mailBody;
    

    .= 是连接字符串的运算符。它等于:

    $mailBody = $mailBody . 'something new string to concat';
    

    【讨论】:

    • 感谢您的帮助,您的方法有效,但是如果我想发送两行,例如Expiration_MessageExpiry_Date,该怎么办?
    • 然后你只需要将它连接到你的字符串$mailBody .= $row['Expiration_Message'] . ", Date: " . $row['Expiry_Date'] . "&lt;br&gt;\n"; 只需阅读这个:php.net/manual/en/language.operators.string.php
    • 再次感谢。您知道是否有任何方法可以针对这种情况发送 SMS 消息、Telegram 或任何其他类型的通知?
    • 有电报API,有服务商发送短信。大多数聊天程序都有API,但我认为,首先你应该学习基础知识。
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 2011-06-26
    • 1970-01-01
    • 2016-11-09
    • 2013-11-18
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多