நேரம் சரியில்லையா? மிக விரைவாக மின்னஞ்சல் அனுப்பப்பட்டதா? மின்னஞ்சல்களை தாமதப்படுத்துவது பல சூழ்நிலைகளில் பயனுள்ளதாக இருக்கும்: உங்களை மறுபரிசீலனை செய்வதற்கான நேரத்தை வழங்குவதா அல்லது உங்கள் சொந்த பணிச்சுமையை திறம்பட நிர்வகிக்க வேண்டுமா - நேரம் முக்கியமானது. மின்னஞ்சல்களை அனுப்புவதை தாமதப்படுத்தவும் உங்கள் சொந்த தகவல்தொடர்புகளை மேம்படுத்தவும் மூன்று வழிகள் இங்கே உள்ளன.
அவுட்லுக்
மைக்ரோசாஃப்ட் அவுட்லுக் ஒரு உள்ளமைக்கப்பட்ட அம்சத்தை வழங்குகிறது, இது மின்னஞ்சல்களை தாமதப்படுத்த உங்களை அனுமதிக்கிறது. இதைச் செய்ய, செயல்பாட்டைப் பயன்படுத்தவும் "விருப்பங்கள் > டெலிவரி தாமதம்":
இந்த தீர்வின் பெரிய தீமை என்னவென்றால் (எக்ஸ்சேஞ்ச் சூழல்களில் கூட) அவுட்லுக் அனுப்பும் நேரத்தில் கிளையன்ட் பக்கத்தில் இயங்க வேண்டும்.
கூகுள்
ஜிமெயில் இங்கே சற்று சிறந்த தீர்வை வழங்குகிறது. இதைச் செய்ய, மின்னஞ்சலை அனுப்புவதற்கு முன் "அனுப்புவதற்கு அட்டவணை" என்பதற்குச் செல்லவும்.:
ஏற்கனவே அனுப்பப்பட்ட மின்னஞ்சல்களையும் 30 வினாடிகளுக்குள் "தவிர்க்க" முடியும். இதைச் செய்ய, முதலில் "அனைத்து அமைப்புகளையும் அழைக்கவும்" என்பதன் கீழ் தொடர்புடைய அமைப்பை அமைக்கவும்.:
நீங்கள் இப்போது ஒரு மின்னஞ்சலை அனுப்பினால், கீழே இடதுபுறத்தில் இந்தக் காலத்திற்குள் அதைச் செயல்தவிர்க்கலாம்:
பூமராங்
அவுட்லுக்கிற்கான பூமராங் போன்ற கட்டண சேவை வழங்குநர்கள் உள்ளனர், நினைவூட்டல்கள் அல்லது தானியங்கு பின்தொடர்தல்களுக்கு கூடுதலாக, தாமதமாக மின்னஞ்சல் அனுப்பும்:
இங்குள்ள குறைபாடு என்னவென்றால், மின்னஞ்சல்கள் மூன்றாம் தரப்பு சேவையகங்களில் முடிவடையும் மற்றும் அவற்றைப் பயன்படுத்துவதற்கு கட்டணம் வசூலிக்கப்படுகிறது.
PHP
ஏதாவது ஒன்றை நீங்களே உருவாக்க போதுமான காரணம்: ஒரு சிறிய PHP ஸ்கிரிப்ட் உதவியுடன் நீங்கள் விரும்பியதை அடையலாம். முதலில், எங்கள் அஞ்சல் பெட்டியில் ஒரு கோப்புறை கட்டமைப்பை உருவாக்குகிறோம்:
இது விரும்பிய கப்பல் நேரத்தை பிரதிபலிக்கிறது. பணிப்பாய்வு இப்போது எழுதப்பட்ட மின்னஞ்சலை அனுப்புவதற்குப் பதிலாக வரைவாகச் சேமித்து தொடர்புடைய கோப்புறைக்கு நகர்த்துகிறது. பின்னர் தேவையான அனைத்து PHP தொகுப்புகளையும் நிறுவுகிறோம்:
composer require php-imap/php-imap phpmailer/phpmailer vlucas/phpdotenv
இறுதியாக ஒன்றை உருவாக்குகிறோம் .env
அணுகல் தரவு மற்றும் அமைப்புகளுடன் கோப்பு:
HOST_SMTP="xxx"
PORT_SMTP=465
HOST_IMAP="xxx"
PORT_IMAP=993
USERNAME="foo@bar.com"
PASSWORD="xxx"
ENCRYPTION="ssl"
FROM_ADDRESS="foo@bar.com"
FROM_NAME="Foo Bar"
FOLDER_INBOX="INBOX/DELAY"
FOLDER_OUTBOX="Gesendete Elemente"
PHP_EXECUTABLE="/usr/bin/php"
பின்வரும் PHP ஸ்கிரிப்ட் மீதமுள்ளதைச் செய்கிறது:
<?php
require_once __DIR__ . '/vendor/autoload.php';
class MailDelay
{
private \PhpImap\Mailbox $mailbox;
private array $folders;
public function init(): void
{
$this->loadEnvironmentVariables();
$this->initMailbox();
$this->initFolders();
$this->processFolders();
}
private function loadEnvironmentVariables(): void
{
$dotenv = \Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
}
private function initMailbox(): void
{
$this->mailbox = new \PhpImap\Mailbox(
'{' . $_SERVER['HOST_IMAP'] . ':' . $_SERVER['PORT_IMAP'] . '/imap/ssl}' . $_SERVER['FOLDER_INBOX'],
$_SERVER['USERNAME'],
$_SERVER['PASSWORD'],
sys_get_temp_dir(),
'UTF-8'
);
}
private function initFolders(): void
{
$this->folders = [];
$folders = $this->mailbox->getMailboxes('*');
foreach ($folders as $folder) {
if ($folder['shortpath'] === $_SERVER['FOLDER_INBOX']) {
continue;
}
$this->folders[] = (object) $folder;
}
}
private function processFolders(): void
{
foreach ($this->folders as $folder) {
$this->mailbox->switchMailbox($folder->fullpath);
$mailIds = $this->mailbox->searchMailbox('ALL');
foreach ($mailIds as $mailId) {
$preparedMail = $this->prepareMailData($mailId, $folder->shortpath);
if (
$preparedMail->subject !== 'Dies ist Plain Text' &&
strtotime($preparedMail->time_to_send) > strtotime('now')
) {
continue;
}
try {
$this->sendMail($preparedMail);
echo 'Successfully sent mail #' . $preparedMail->id . '.' . PHP_EOL;
} catch (\Exception $e) {
echo 'Error in sending mail #' . $preparedMail->id . ': ' . $e->getMessage() . PHP_EOL;
}
}
}
echo 'All mails have been processed.' . PHP_EOL;
}
private function prepareMailData(int $id, string $folder): object
{
$mail = $this->mailbox->getMail($id, false); // don't mark as unread
return (object) [
'id' => (string) $mail->id,
'to' => $this->formatEmailAddresses($mail->to),
'cc' => $this->formatEmailAddresses($mail->cc),
'bcc' => $this->formatEmailAddresses($mail->bcc),
'subject' => (string) $mail->subject,
'content_html' => $this->convertEncoding($mail->textHtml),
'content_plain' => $this->convertEncoding($mail->textPlain),
'attachments' => $this->determineAttachments($mail->getAttachments()),
'time_to_send' => $this->determineTimeToSend(explode('/', $folder)[2], $mail->date)
];
}
private function formatEmailAddresses(?array $addresses): ?array
{
if (empty($addresses)) {
return null;
}
return array_map(
function ($key, $value) {
return [
'email' => $key,
'name' => $key === $value ? null : str_replace(' (' . $key . ')', '', $value)
];
},
array_keys($addresses),
$addresses
);
}
private function convertEncoding(string $text): string
{
return mb_detect_encoding($text, 'UTF-8, ISO-8859-1') !== 'UTF-8'
? \UConverter::transcode($text, 'UTF8', 'ISO-8859-1')
: $text;
}
private function determineAttachments(array $attachmentsImap): array
{
$attachments = [];
if (!empty($attachmentsImap)) {
foreach ($attachmentsImap as $attachment) {
$attachments[] = [
'name' => $attachment->name,
'file' => $attachment->filePath,
'disposition' => $attachment->disposition,
'inline_id' => $attachment->contentId
];
}
}
return $attachments;
}
private function determineTimeToSend(string $delayTime, string $date): ?string
{
$timeToSend = null;
if ($delayTime === 'THIS EVENING') {
$timeToSend = date('Y-m-d', strtotime($date)) . ' 18:00:00';
} elseif ($delayTime === 'THIS NIGHT') {
$timeToSend =
date('Y-m-d', strtotime($date . (date('H', strtotime($date)) >= 4 ? ' + 1 day' : ''))) . ' 03:42:00';
} elseif ($delayTime === 'NEXT MORNING') {
$timeToSend =
date('Y-m-d', strtotime($date . (date('H', strtotime($date)) >= 9 ? ' + 1 day' : ''))) . ' 09:00:00';
} elseif ($delayTime === 'NEXT WEEK') {
$date = new \DateTime(date('Y-m-d', strtotime($date)));
$date->modify('next monday');
$timeToSend = $date->format('Y-m-d') . ' 09:00:00';
}
return $timeToSend;
}
private function sendMail(object $preparedMail): void
{
$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = $_SERVER['HOST_SMTP'];
$mail->Port = $_SERVER['PORT_SMTP'];
$mail->Username = $_SERVER['USERNAME'];
$mail->Password = $_SERVER['PASSWORD'];
$mail->SMTPSecure = $_SERVER['ENCRYPTION'];
$mail->setFrom($_SERVER['FROM_ADDRESS'], $_SERVER['FROM_NAME']);
$mail->SMTPAuth = true;
$mail->SMTPOptions = [
'tls' => ['verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true],
'ssl' => ['verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true]
];
$mail->CharSet = 'utf-8';
$this->addRecipients($mail, $preparedMail->to, 'addAddress');
$this->addRecipients($mail, $preparedMail->cc, 'addCC');
$this->addRecipients($mail, $preparedMail->bcc, 'addBCC');
$mail->isHTML(!empty($preparedMail->content_html));
$mail->Subject = $preparedMail->subject;
if (!empty($preparedMail->content_html)) {
$mail->Body = $preparedMail->content_html;
$mail->AltBody = !empty($preparedMail->content_plain)
? $preparedMail->content_plain
: strip_tags(str_replace(['<br>', '<br/>', '<br />'], "\r\n", $preparedMail->content_html));
} else {
$mail->Body = $preparedMail->content_plain;
}
$this->addAttachments($mail, $preparedMail->attachments);
$mail->send();
$this->mailbox->moveMail($preparedMail->id, $_SERVER['FOLDER_OUTBOX']);
}
private function addRecipients(\PHPMailer\PHPMailer\PHPMailer $mail, ?array $recipients, string $method): void
{
if (!empty($recipients)) {
foreach ($recipients as $recipient) {
$mail->$method($recipient['email'], $recipient['name']);
}
}
}
private function addAttachments(\PHPMailer\PHPMailer\PHPMailer $mail, array $attachments): void
{
if (!empty($attachments)) {
foreach ($attachments as $attachment) {
if (!empty($attachment['file']) && !empty($attachment['name']) && file_exists($attachment['file'])) {
if ($attachment['disposition'] === 'attachment') {
$mail->addAttachment($attachment['file'], $attachment['name']);
} elseif ($attachment['disposition'] === 'inline') {
$mail->AddEmbeddedImage(
$attachment['file'],
$attachment['inline_id'],
$attachment['name'],
'base64',
'image/png'
);
}
}
}
}
}
}
$md = new MailDelay();
$md->init();
இந்த ஸ்கிரிப்ட் மீண்டும் மீண்டும் இயங்கும் வகையில், நாங்கள் ஒரு பாஷ் கோப்பை உருவாக்குகிறோம்:
#!/usr/bin/env bash
source $(dirname "$0")/.env
"$PHP_EXECUTABLE" $(dirname "$0")/maildelay.php
கிரான் ஜாப் மூலம் ஒவ்வொரு 10 நிமிடங்களுக்கும் இந்த ஸ்கிரிப்டை இயக்குவோம்:
*/10 * * * * /path/to/maildelay/maildelay.sh 2>&1
இந்த தீர்வு நெகிழ்வாக தனிப்பயனாக்கக்கூடியது, தனியுரிமைக்கு ஏற்றது மற்றும் இலவசம். இது எந்த (IMAP இணக்கமான) கணக்கிலும் வேலை செய்கிறது. ஆனால் நீங்கள் Outlook அல்லது Gmail இல் ஒருங்கிணைந்த செயல்பாட்டைப் பயன்படுத்துகிறீர்களா என்பதைப் பொருட்படுத்தாமல், பூமராங் போன்ற மேம்பட்ட கருவிகளைப் பயன்படுத்தவும் அல்லது தனிப்பட்ட தீர்வைச் செயல்படுத்தவும் - நேரம் மாற்றப்பட்ட அடிப்படையில் மின்னஞ்சல்களை அனுப்புவது உங்கள் சொந்த உற்பத்தித்திறனை அதிகரிக்க ஒரு மதிப்புமிக்க கருவியாகும்.