[ ventura @ 22.02.2004. 16:10 ] @
Napravo sam kod koji ce putem Net:SMTP-a da posalje HTML poruku na sve adrese iz subscribers file-a (sub.txt)

Code:

#!/usr/bin/perl --

print "Content-type: text/html\n\n";


use DBI;
#use DBD::Pg;
#use Mail::Mailer;
use Net::SMTP;
#use Socket;
require "cgi-lib.pl";

######### UCITAJ FAJLOVE ###############
######### UCITAJ FAJLOVE ###############
######### UCITAJ FAJLOVE ###############
######### UCITAJ FAJLOVE ###############

    open HTMLFILE,
             "link.html";
    read HTMLFILE, $html,16384;
    close HTMLFILE;
    
    
#    open ALTFILE,
#"subscribers.txt";
#    read ALTFILE, $alt,16384;
#    close ALTFILE;


######### UCITAJ FAJLOVE ###############
######### UCITAJ FAJLOVE ###############
######### UCITAJ FAJLOVE ###############
######### UCITAJ FAJLOVE ###############


open(FILE,"sub.txt");
while(<FILE>)



    
    $smtp = Net::SMTP->new('mail.daniflowers.com');
    $smtp = Net::SMTP->new('mail.daniflowers.com',
           Hello => 'mail.daniflowers.com',
           Timeout => 30,
         Debug   => 1,
          );

    $subject = "DaniFlowers - Isporuka cveca";
    $from = "office\@daniflowers.com";



$address = $_;

    $smtp->mail($from);
    $smtp->to($address);

    $smtp->data();

    ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
localtime(time);

    @days = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
    @months =
("Jan","Feb","Mar","Apr","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

    $year += 1900;
    $day = $days[$wday];
    $month = $months[$mon];
    $dateString = sprintf("$day, $mday $month $year
%0.2d:%0.2d:%0.2d -0600",$hour,$min,$sec);

    $msg = "";
    $msg = $msg . "To: $address\n";
       $msg = $msg . "From: $from\n";
       $msg = $msg . "Reply-To: $from <$from>\n";
       $msg = $msg . "Subject: $subject\n";
    $msg = $msg . "Date: $dateString \n";

    $uid =  time;
    $partID = "----=_NextPart_" . $uid;

    $msg = $msg . "MIME-Version: 1.0\n";
    $msg = $msg . "Content-Type: multipart/alternative;\n";
    $msg = $msg . "        boundary=\"$partID\"\n";
    $msg = $msg . "\n";
    $msg = $msg . "This is a multi-part message in MIME
format.\n\n";
    $msg = $msg . "\n";

    $msg = $msg . "--" . $partID;
    $msg = $msg . "\n";
    $msg = $msg . "Content-Type: text/plain;\n\n";
    $msg = $msg . $alt;
    $msg = $msg . $textCancelMSG;
    $msg = $msg . "\n\n";
                    
    $msg = $msg . "--" . $partID;
    $msg = $msg . "\n";
    $msg = $msg . "Content-Type: text/html;\n\n";

       $msg = $msg . $html;                
    $msg = $msg . "\n\n";

    $msg =~ s/\x0d//g;
    $msg =~ s/\x0a/\x0d\x0a/g;

    $smtp->datasend($msg);
    $smtp->dataend();

    
    $smtp->quit;
}

######### KRAJ KODA #############



SUBSCRIBERS file izleda ovako



Kada skriptu pokrenem, desava se sledece:

Mail se posalje svima sa lise, ali samo [email protected] (zadnji entry u sub.txt fajlu) dobije HTML mail, ostali dobiju poruku u plain text formatu koja sadrzi komletan $msg string, kako da napravim da svi korisnici dobiju HTML poruku a ne plaintext... probavao sam da resetujem sve parametre na kraju, da stavljam while petlju unutar konekcjie na SMTP server, da ucitavam iz array-a umesto iz fajla... I uvek je rezultat isti.. samo zadnji korisnik bilo u fajlu, bilo u array-u dobije HTML mail, a svi ostali nerazumljivi plaintext.
[ Free_Sex @ 25.02.2004. 00:15 ] @
Ventura da napomenem da nisam slao html mail .... ali evo sta bih probao :

- $smtp (strukturu ?!?) definisi pre petlje ... ne znam da li ga poziv na quit metodu "ubije" skroz, ali ne bih rekao. Ili to, ili probaj da ga obrises skroz pre loop-a. Dakle nesto tipa free $smtp ili slicno.

- ili probaj sa onim mime easy modulom. Ne znam tacan naziv, ali koliko sam skapirao on se bas i koristi za sklapanje poruka sa atacmentima ....
[ mire @ 29.03.2004. 01:46 ] @
na prvi pogled kod ti je prilicno lose napisan

npr. $msg = $msg . 'nesto' moze da se napise kao $msg .= 'nesto';

sto se tice poruke, ti saljes multipart alternative tj. imas i text i html mail u njemu a sam mail reader na osnovu svojih sposobnosti bira sta prikazuje korisniku. ti sa tim nemas nista.

najverovatnije nisi dobro formirao mail

svaki recipient treba da dobije isti mail (osim naravno hedera)

ako to nije slucaj pogledaj uputstvo za smtp modul kao i izgled iste poruke koju tvoj program kreira i one koju bi kreirao neki mail klijent npr. mozilla mail ili outlook
[ BobMarley @ 29.03.2004. 11:27 ] @
dodaj ih u Carbon Copy umjesto slanja jedan po jedan.
ili Definiraj za sve mail adrese headere u neki array pa se probaj spojiti na SMTP
i onda sa foreach petljom poslati mail i tek poslje petlje se disconnectati sa SMTP-a.

Isto tako i ovdje connect i disconnect sa SMTP-a radi van petlje.