PostFix SMTP Auth

Вы можете сделать это примерно так:

set -C; num=0                                  ### set -o noclobber; init $num
[ -e "$1" ] &&                                 ### this needs to be true
until 2>&3 >"./DUPES/$((num+=1))-$1" &&        ### try to open() num+=1
      mv --  "$1"  "./DUPES/$num-$1"           ### if opened, mv over it
do :; done 3>/dev/null                         ### do nothing

Вы сразу же убедитесь, что несколько экземпляров не могут защитить одно и то же имя для любого заданного файла, и увеличите вашу переменную.

/ dev / null noclobber включен, он не будет перезаписывать другой файл - он только откроет () новый, если вы не используете > | . И поэтому вам не нужна его жалоба, потому что все дело в том, чтобы увеличивать существующие файлы до тех пор, пока не будет найдено несуществующее имя.

Что касается аспекта производительности - было бы лучше, если бы вы не начинали с нуля. Или, если вы пытались наверстать разницу. Я предполагаю, что приведенное выше может быть несколько улучшено, например:

set -C; num=0                                  ### set -o noclobber; init $num
until 2>&3 >"./DUPES/$((num+=1))-$1"  &&       ### try to open() num+=1
      mv --  "$1"  "./DUPES/$num-$1"           ### if opened, mv over it
do    [ -e  "./DUPES/$((num*2))-$1" ] &&       ### halve fail distance
      num=$((num*2))                           ### up to a point of course
done  3>/dev/null                              ### done

... но до 1000 вам, вероятно, не нужно сильно об этом беспокоиться. У меня есть 65 тысяч случайных имен за пару секунд.

Кстати - вы могли подумать, что можете просто:

>"./DUPES/$((num+=1))-$1" mv -- "$1" "./DUPES/$num-$1"

... но это не работает в оболочке bash .

num=0; echo >"/tmp/$((num+=1))" >&2 "$num"; echo "$num" /tmp/[01]

0
1 /tmp/1

По какой-то причине bash выполняет присвоение перенаправлений в каком-то другом контексте - и поэтому расширения происходят в странном порядке. Поэтому вам нужна отдельная простая команда для расширения правильного значения $ num , как я получил здесь с помощью && . В противном случае, однако:

num=0; echo "$((num+=1))" "$num"

1 1
1
13.08.2018, 18:14
1 ответ

Приведенный ниже сценарий электронной почты предназначен для электронной почты PHP с аутентификацией SMTP. Вам нужно использовать порт 465 или 587 для отправки электронной почты с аутентификацией SMTP.

Порт SMTP по умолчанию — порт 25. Если вы используете порт 25, это означает, что электронная почта будет отправляться с сервера без проверки подлинности SMTP.

Загрузите phpmailer отсюда https://github.com/PHPMailer/PHPMailer, а затем используйте приведенный ниже код.

<?php

require_once "vendor/autoload.php";

$mail = new PHPMailer;

//Enable SMTP debugging. 
$mail->SMTPDebug = 3;                               
//Set PHPMailer to use SMTP.
$mail->isSMTP();            
//Set SMTP host name                          
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;                          
//Provide username and password     
$mail->Username = "name@gmail.com";                 
$mail->Password = "super_secret_password";                           
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "tls";                           
//Set TCP port to connect to 
$mail->Port = 587;                                   

$mail->From = "name@gmail.com";
$mail->FromName = "Full Name";

$mail->addAddress("name@example.com", "Recepient Name");

$mail->isHTML(true);

$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";

if(!$mail->send()) 
{
    echo "Mailer Error: ". $mail->ErrorInfo;
} 
else 
{
    echo "Message has been sent successfully";
}
0
28.01.2020, 00:30

Теги

Похожие вопросы