Автор Тема: Mail - как да пращаме писма  (Прочетена 10110 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #15 -: 27 Юли 2012, 11:29:04 »
Имам инсталиран sendmail на лаптопа,тогава порта който трябва да използвам при създаването на транспорта 25-ти ли трябва да е ?

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: Mail - как да пращаме писма
« Отговор #16 -: 27 Юли 2012, 14:58:21 »
Не ти трябва swiftmailer особено ако не ти се чете документацията им....
Ползвай моят код, на веднъж пращам някъде около 900 писма от сървъра на godaddy, тествано е много пъти:

sendMail.php

Код: PHP
  1. <?php
  2. // read the list of emails from the file.
  3.     $email_list = file("e_list.txt");
  4.  
  5. // count how many emails there are.
  6.     $total_emails = count($email_list);
  7.  
  8. // go through the list and trim off the newline character.
  9.     for ($counter = 0; $counter < $total_emails; $counter++) {
  10.         $email_list[$counter] = trim($email_list[$counter]);
  11.     }
  12.  
  13. // implode the list into a single variable, put commas in, apply as $to value.
  14.     $allEmails = implode(",", $email_list);
  15.    
  16. if (isset($_POST['Submit'])) {
  17.     $local = $_SERVER['SERVER_NAME'];
  18.     $subject = $_POST['subject'];
  19.     $header_ = 'MIME-Version: 1.0' . "\r\n" .
  20.                'Content-type: text/plain; charset=UTF-8' . "\r\n" .
  21.                'Content-Transfer-Encoding: base64' . "\r\n";
  22.                 'X-Priority: 3 (Higuest)' . "\n";
  23.     $header_.='FROM: jazzman@kaneffbrookside.ca'. "\n";
  24.     $header_ .= 'BCC: ' . $allEmails . "\n";
  25.     $message = '' . "\r\n";
  26.     $message .= $_POST['message'] . "\r\n";
  27.     if (mail(null, '=?UTF-8?B?' . base64_encode($subject) . '?=', base64_encode($message), $header_ . '')) {
  28.         echo "Success";
  29.         exit;
  30.     } else {
  31.         echo "Failed";
  32.         exit;
  33.     }
  34. }
  35.  
  36. ?>
  37. <!DOCTYPE html>
  38. <html>
  39.     <head>
  40.         <title></title>
  41.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  42.     </head>
  43.     <body>
  44.         <a href="control_panel.php"><small>Control panel</small></a> | <a href="startCrop.php"><small>Crop new image</small></a> | <a href="logout.php"><small>Logout</small></a>
  45.         <fieldset>
  46.             <legend><h2>Crop new image and send a message to subscribers</h2></legend>
  47.             <form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" enctype="multipart/form-data" accept-charset="utf-8">
  48.                 <table border="0" width="100%" cellpadding="0" cellspacing="0">
  49.                     <tr  align="left" valign="top">
  50.                         <th>Title:</th>
  51.                         <td><input type="text" name="subject" value="" /></td>
  52.                     </tr>
  53.                     <tr><td>&nbsp;</td></tr>
  54.                     <tr align="left" valign="top">
  55.                         <th width="160">Message:</th>
  56.                         <td><textarea row="30" cols="50" name="message"></textarea></td>
  57.                     </tr>
  58.                    
  59.                 </table>
  60.  
  61.                 <input type="submit" name="Submit" value="Go" />
  62.             </form>
  63.         </fieldset>
  64.     </body>
  65. </html>
  66.  

e_list.txt:
tuparov86@gmail.com,dimitartuparov@mail.bg,4174890679@vmobl.com,jazzman@kaneffbrookside.ca
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Mail - как да пращаме писма
« Отговор #17 -: 27 Юли 2012, 16:26:51 »
//offtopic
В случая както е описано в коментара преди цикъла на кода на Джаз ,се премахват само новите редове от стойностите на елементите на новосъздалия се масив, така че могат да се спестят няколко реда от това посредством флаговете на функцията file():

Код: PHP
  1. $email_list = file("e_list.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  2. $allEmails = implode(",", $email_list);
  3. //etc

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Mail - как да пращаме писма
« Отговор #18 -: 27 Юли 2012, 18:43:58 »
Определено си има причина да се използва някаква библиотека при изпращане на емайли.  Определено решението на Джаз е елегантно, но какво става ако искаш да изпратиш писмо с HTML и примерно писмо с прикачени файлове? Да не говорим, че тези библиотеки се подържат от доста хора, базирани са на най-добрите практики и така нататък. Ако е интересна темата може да задълбаем в нея. В частност за Swiftmailer, проектта беше поет от Simfony и компанията, която стой зад нея, така че това определено е стъпка напред.

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #19 -: 28 Юли 2012, 01:33:58 »
Не аз също смятам че е по-удачно да се използва библиотека за мейли,но не мога да разбера какво не правя както трябва зада изпратя писмо на Gmail-а ми?
Четох рових из документацията ама явно нещо пропускам .....
Сложил съм си Sendmailer на Кубунту-туи при създаването на транспорта ползвам този ред код ..>>
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'); (пътя до sendmail-а ми е правилен)
Така и не разбрах какър порт трябва да укажа,но пробвах с 25,587,465 .... дори в спам не пристигат писма.

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Mail - как да пращаме писма
« Отговор #20 -: 28 Юли 2012, 02:24:17 »
Не си чел достатъчно документацията. Сега мога да ти предоставя компромисно решение, което е доста лесно и мързеливо. Вместо да се мъчиш с sendmail, може да използваш smtp-tо на gmail и да пращаш през него. Нека покажа какво имам предвид.
Код: PHP
  1. require_once 'inc/lib/swift_required.php';
  2.  
  3.     //Create the Transport
  4.     $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 25)
  5.     ->setUsername(//gmail username test@gmail.com)
  6.     ->setPassword(''//the pass of the mail)
  7.     ;
  8.  
  9.     $mailer = Swift_Mailer::newInstance($transport);
  10.  
  11.  
След това си продължаваш с форматирането на писмото.  Това си има свойте лимити обаче. Най-вероятно на определена бройка gmail ще те блокне.  Тоест няма  може да пращаш безброй писма. Най- много до 50 броя на ден.  Имай предвид, че проблема не ти е в swift mailer-a , а в sendmail-a. И той си има нужда от малко ръчкане.

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #21 -: 11 Октомври 2012, 23:04:08 »
Налага ми се да пращам писма към 1 имейл.
Ползвам Swiftmailer 4.2.1 за пращането,но писмата не пристигат в пощата(за тест си ги пращам на моя лична gmail).
Иначе виждам,че страницата започва да се презарежа (т.е обработва се и се пуска по СМПТ сендмейл),но не пристигат в gmail-a.
Това е целият код във файла от който трябва дасе праща писмото:
<?php
session_start
();
require_once 
'lib/swift_required.php';

// Create the Transport
$transport Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');

/*
You could alternatively use a different transport such as Sendmail or Mail:

// Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');

// Mail
$transport = Swift_MailTransport::newInstance();
*/

// Create the Mailer using your created Transport
$mailer Swift_Mailer::newInstance($transport);

// Create the message
$message Swift_Message::newInstance()

  
// Give the message a subject
  
->setSubject('TEST')

  
// Set the From address with an associative array
  
->setFrom(array('test@mail.bg' => 'John Doe'))

  
// Set the To addresses with an associative array
  
->setTo(array('karboratorr@gmail.com'=> 'Nikolai'))

  
// Give it a body
  
->setBody('Here is the message itself')
  ;
// Send the message
$result $mailer->send($message);

if (
$mailer->send($message))
{
  echo 
"Sent\n";
}
else
{
  echo 
"Failed\n";
}


След като страницата приключи със зареждането получавам Sent  от проверката!
Чудя се аз ли нещо съм пропуснал да направя зада не получавам писма или това е защото ги пращам от localhost чрез sendmail SMPT.И ако всичко по кода ми е Ок това може ли да означава,че когаот се прехвърли на читав платен хост най-вероятно всичко трябва да сработи ?
(Питам щот нямам време да го тествам по безплатни хостове или да си закупя за да го тествам)
Благодаря за съдействието.

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Mail - как да пращаме писма
« Отговор #22 -: 11 Октомври 2012, 23:10:45 »
Ами ти не пращаш в случая през smtp, а ползваш sendmail като MTA. Ето как се сетва, SMTP:
Код: PHP
  1. // Create the Transport
  2. $transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25)
  3.   ->setUsername('your username')
  4.   ->setPassword('your password')
  5.   ;

Извадка от http://swiftmailer.org/docs/sending.html
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #23 -: 11 Октомври 2012, 23:23:01 »
Доколкото разбрах от документацията
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
Тва накрая -bs означава че Sendmail ще бачка през smtp.
Ако съм в грешка моля някой да ми разясни в коя ситуация какво трябва да се ползва.
В момента имам инсталнат Sendmail и съм с Кубунту.
Когато кодът се пренесе на хост кво става?
Т.е там този вариант ли трябва да ползвам:
$transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25)
  ->setUsername('your username')
  ->setPassword('your password')
  ;

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Mail - как да пращаме писма
« Отговор #24 -: 11 Октомври 2012, 23:31:38 »
-bs опцията се ползва най-общо казано за да може sendmail да говори SMTP протокола. Ето точното обяснение, че не мога да го дефинирам:
-bs Stand-alone SMTP server mode. Read SMTP commands from standard
input, and write responses to standard output. In stand-alone
SMTP server mode, mail relaying and other access controls are
disabled by default. To enable them, run the process as the
mail_owner user.

А опцията която ти дадох, е за да използваш външен SMTP сървър, към който да се уторизираш с потребителско име и парола ( ако това е нужно) и да изпратиш писмото през него.
Опитай по начина по който ти предложих и виж резултата ( пробвай примерно с smtp.gmail.com )
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #25 -: 11 Октомври 2012, 23:48:39 »
Нищо не се получи.Проверката която преди ми вадеше send сега не показва нищо.
И в gmail-а не пристигат писма.
<?php
session_start
();
require_once 
'lib/swift_required.php';

// Create the Transport
$transport Swift_SmtpTransport::newInstance('smtp.gmail.com'25)
  ->
setUsername('тук пища потребителското име в гмаил-а')
  ->
setPassword('и паролата за мейла')
  ;

/*
You could alternatively use a different transport such as Sendmail or Mail:

// Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');

// Mail
$transport = Swift_MailTransport::newInstance();
*/

// Create the Mailer using your created Transport
$mailer Swift_Mailer::newInstance($transport);

// Create the message
$message Swift_Message::newInstance()

  
// Give the message a subject
  
->setSubject('TEST')

  
// Set the From address with an associative array
  
->setFrom(array('test@domain.org' => 'John Doe'))

  
// Set the To addresses with an associative array
  
->setTo(array('karboratorr@gmail.com'=> 'Nikolai'))

  
// Give it a body
  
->setBody('Here is the message itself')
  ;
// Send the message
$result $mailer->send($message);

if (
$mailer->send($message))
{
  echo 
"Sent\n";
}
else
{
  echo 
"Failed\n";
}

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Mail - как да пращаме писма
« Отговор #26 -: 11 Октомври 2012, 23:58:56 »
Промени $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 25) на
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #27 -: 12 Октомври 2012, 00:08:30 »
Пууу най-накрая ..... БЛАГОДАРСКО  ;D
Сега да попитам този начин удачен ли е когато кодът се качи на хост или ще има някакво ограничение на изпращаните писма(през smtp.gmail.com) ?


borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Mail - как да пращаме писма
« Отговор #28 -: 12 Октомври 2012, 00:19:37 »
Дам този начин е най-удачен, защото писмото ти е минало през сървъра и е удостоверено. Когато го качиш на хостинг просто задай техния SMTP сървър с user и  pass за пощата от акаунта ти.
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

KarBorAtoR

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 182
Re: Mail - как да пращаме писма
« Отговор #29 -: 12 Октомври 2012, 00:24:01 »
Ахам ... а инче ако пак ползвам smtp.gmail ще имам ли ограничение на пратените писма ?