【问题标题】:when incoming mails insert to database, only one email detail insert to the data base当收到的邮件插入数据库时​​,只有一封电子邮件详细信息插入数据库
【发布时间】:2016-05-23 04:31:11
【问题描述】:

与 stackoverflow 开发人员一起,我赢得了我的第一个任务。我正在为数据库查询创建传入电子邮件插入。

这是我的代码:

#!/usr/bin/php -q
<?PHP 

/* connect to gmail */
$hostname = '{example.org:995/pop3/ssl/novalidate-cert}'; 
$username = 'user';
$password = 'pass';

/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to SERVER: ' . imap_last_error());


/* grab emails */
$emails = imap_search($inbox,'ALL');

/* if emails are returned, cycle through each... */
if($emails) {

    /* begin output var */
    $output = '';

    /* put the newest emails on top */
    rsort($emails);

    /* for every email... */
    foreach($emails as $email_number) {

        /* get information specific to this email */
        $overview = imap_fetch_overview($inbox,$email_number,0);
        $message = imap_fetchbody($inbox,$email_number,2);

        /* output the email header information */
        //$read_status  = '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">';
        $subject = $overview[0]->subject;
        $from    = $overview[0]->from;
        $received_date = '<span class="date">on '.$overview[0]->date.'</span>';
        //$output.= '</div>';

        /* output the email body */
        $output= '<div class="body">'.$message.'</div>';
    }

    //echo $output;
$servername = "localhost";
$username = "username ";
$password = "password ";
$dbname = "dbname";

$conn = mysqli_connect($servername, $username, $password, $dbname) or die("Connection failed: " . mysqli_connect_error());

//INSERT INTO DATABASE

$sql = "INSERT INTO ads(`banner_name`, `hd_image`)VALUES('".$message."', '".$subject."') ";
$result = mysqli_query($conn, $sql);
} 

/* close the connection */
imap_close($inbox);

?>

这运作良好。我的问题是,当我向我的电子邮件地址发送新邮件时。查询将每次执行并插入第一封电子邮件详细信息。不是新发送的电子邮件详细信息。请帮我解决这个问题。

另外,如果收到带有附件的电子邮件,我该如何下载?

感谢您的大力帮助

【问题讨论】:

  • 您将从循环中获得最后一项(如果有多封电子邮件,您的代码只会将最后一封插入数据库)。在 foreach 循环中执行数据库操作。
  • 嗨,我将数据库代码从循环中取出,但我仍然收到我的第一封电子邮件,而不是收到新发送的详细信息谢谢!
  • 在 foreach 循环中
  • 嗨,当我将数据库查询放入 foreach 时,它将收到收件箱中的所有电子邮件。我怎样才能只得到最后一个?
  • 太棒了!感谢你的帮助。完美运行!

标签: php mysql email imap


【解决方案1】:

这里您需要使用 asort() 函数,因为 rsort() 将用于反转顺序,并且您需要数组的最后一个索引,它比您的最新记录将使用asort() 获取最后一个索引的最新记录。

asort($emails); // it will give you latest email on last index.

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 2012-05-25
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多