簡體   English   中英

如何使用php制作批量電子郵件腳本

[英]How To make Bulk email Script using php

我正在為1k用戶制作批量電子郵件腳本,我想發送電子郵件,但是我的腳本給我錯誤,超時。

如何處理頁面超時。 任何有關后端的建議都可以運行此腳本。

如果用戶單擊“發送”按鈕,則在用戶關閉此頁面但腳本正常工作的情況下運行此腳本后端。

    $Email_ID="";
    $queryUser=mysql_query("SELECT  `email` From `users`",$conn);
    while($User=mysql_fetch_array($queryUser))
    {
        $to = $User["email"];
        $Email_ID=$User["email"];
        $from = 'donotreply@abc.com';
        $from_name = 'Test bulk email';
        $senderMail="donotreply@abc.com";
        $senderName="abc";
        $message=$_POST["message"];
        $subject = $_POST["subject"]; 
        $html_content = $_POST["message"];
        $from = $senderName." <".$senderMail.">"; 
        $headers = "From: $from";
        $headers = "CC: jignesh.tplabs@gmail.com";
        $headers = "BCC: jignesh.tplabs@gmail.com";

        $semi_rand = md5(time()); 
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

        $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

        $message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
        "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 

        $upload_file="";
        if(isset($_SESSION["uniqid"]))
        {
            $query=mysql_query("SELECT  * From `bulk_email_attchment` where `unique_id`='".$_SESSION["uniqid"]."' ",$conn);
            while($row=mysql_fetch_array($query))
            {
                        $files = "Attchment/".$row["name"];
                        $message .= "--{$mime_boundary}\n";
                        $fp =    @fopen($files,"rb");
                        $data =  @fread($fp,filesize($files));
                        @fclose($fp);
                        $data = chunk_split(base64_encode($data));
                        $message .= "Content-Type: application/octet-stream; name=\"".basename($files)."\"\n" . 
                        "Content-Description: ".basename($files)."\n" .
                        "Content-Disposition: attachment;\n" . " filename=\"".basename($files)."\"; size=".filesize($files).";\n" . 
                        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                }
        }


        $message .= "--{$mime_boundary}--";
        $returnpath = "-f" . $senderMail;

        //send email
        $mail = mail($to, $subject, $message, $headers, $returnpath); 

    }
}

您可以設置cron腳本。 因此,您的電子郵件腳本由cron處理並在后台運行。

選項1

如果要在用戶中止的情況下繼續執行腳本,則可以使用ignore_user_abort()

// Ignore if a user aborts
ignore_user_abort(true);
set_time_limit(0);

// Send your emails here

有關更多信息,請檢查PHP ignore_user_abort() (文檔)[ http://php.net/manual/fr/function.ignore-user-abort.php]

選項2

將所有提交的表單數據插入數據庫。 然后,您可以進行cron作業,以檢查是否有新的電子郵件作業要提交和提交。 這樣,用戶無需等待,您也不會遇到關閉瀏覽器的問題。

正確的方法:使用命名管道創建一個php隊列,該隊列連接到另一個php腳本,該腳本將在每次調用時發送電子郵件。 如果您只是盯着php,則需要花費一些時間才能正確編碼所有代碼。

適度但不理想的方法:設置Cron Job來調用您的腳本(每次調用都會發送20封左右的電子郵件。如果您使用Godaddy之類的服務,只需使用Google:“ CronJob godaddy設置”

hacky方式:將腳本放在頁面中,該頁面使用查詢字符串重定向到自身,以更新發送了多少電子郵件:

例如,發送20封電子郵件后,請使用以下代碼:

$count = 20;
header('Location http://www.example.com/index.php?count='.$count);

我不建議使用The Hacky Way,因為作為程序員,我們應該嘗試遵循最佳實踐,但是我個人不能阻止您:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM