簡體   English   中英

每 X 分鍾使用 SwiftMailer (PHP) 發送 email

[英]Sending an email using SwiftMailer (PHP) every X minutes

每當客戶端進入特定頁面時,我都可以通過發送電子郵件來使我的代碼工作,問題是如果用戶/客戶端重新加載頁面,則會發送新的 email,這可能導致從我的 smtp 服務器發送數百封郵件.

我正在尋找一個簡單的替代方案,它只能每 5/10/15 分鍾發送一次驗證 email。 不是當用戶重新加載頁面時。

我應該使用 javascript 還是在 function 上簡單的睡眠會起作用。

PD:電子郵件正在通過 php 上的$_SESSION變量發送。

您可以為此使用 cron 作業(如果您的托管環境允許您定義一個),或者跟蹤您上次自己發送電子郵件的時間。

在后一種情況下,您可以例如執行以下操作:

/**
 * Get the current date & time.
 *
 * @return String
 */
function now() {

  return date('Y-m-d H:i:s'); 
}

/**
 * Store last send date. For the sake of simplicity, let's
 * write it to a file. 
 *
 * @return String
 */
function last_send_update($date) {

  file_put_contents('mails_last_send.json', json_encode(['date' => $date]));
}

/**
 * Get last send date from a file. 
 *
 * @return String
 */
function last_send_get() {

  if (!file_exists('mails_last_send.json')) {

    last_send_update(now());
  }

  return json_decode(file_get_contents('mails_last_send.json'))->date;
}

/**
 * Mock sending mails.
 */
function send_mails() {}

// Do the actual math & decide what to do.
  
$last_send = date_create(last_send_get());
$now       = date_create(now());
$diff      = date_diff($now, $last_send)->i; // Difference in minutes

if ($diff >= 10) { 
  
  send_mails();
  last_send_update($now);
}

有關 Cron 及其使用方法,請參閱:

暫無
暫無

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

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