View documentation | View script | License |
Download script | History | Other scripts by: crazyaxe |
30-Apr 16:42 UTC
[0.052] 17.938k
[0.052] 17.938k
Archive version of: massmailer.r ... version: 17 ... crazyaxe 7-Sep-2010Amendment note: Corrected date bug (again) || Publicly available? Yes Rebol [title: "Mass mailer" version: 0.2.17 author: "Massimiliano Vessi" date: 29/9/2009 email: maxint@tiscali.it file: %massmailer.r Purpose: {"Mass emailng the world! Modify boundary if you use attachments."} ;following data are for www.rebol.org library ;you can find a lot of rebol script there library: [ level: 'beginner platform: 'all type: [tutorial tool] domain: [vid gui email ] tested-under: [windows linux] support: none license: [gpl] see-also: none ] ] header-script: system/script/header version: "Version: " append version header-script/version config: array 13 ; the file %mass_mailer_conf.txt contains all configurations ; from 1-8 fields are settings ; 9 subject, and on are last usage configuration ; 10 body message ; 11 email list ; 12 boundary string ; 13 retard ;function to svae all data in mass_mailer_conf.txt file salvatutto: func [ config] [ write %mass_mailer_conf.txt "" foreach item config [ write/append %mass_mailer_conf.txt item write/append %mass_mailer_conf.txt newline ] ] either exists? %mass_mailer_conf.txt [ config: read/lines %mass_mailer_conf.txt ] [ alert "You must set access data. Please fill in data in Settings panel." ritardo: 2 ] configurazione_lay: layout [ across title "Settings" return text "Your email:" email_fl: field return text "SMTP server:" smtp_fl: field return text "SMTP user:" smtpuser_fl: field return text "SMTP password:" smtppass_fl: field return button "Save" [ poke config 1 to-email email_fl/text poke config 2 to-url smtp_fl/text poke config 7 to-string smtpuser_fl/text poke config 8 to-string smtppass_fl/text salvatutto config unview] button "Exit" [unview] ] aiuto_lay: layout [ title "HELP" text 180 {This is a mass email, it permits to send any number of emails without problems. It will send an email each 2 seconds. If you'll fill correctly settings panel, all will be alright. File loaded by Mass mailer must be in ASCII not in unicode. If you use attachments, use a correct boundary string. This program do his best with HTML email body. If you have problems, please contact me: maxint@tiscali.it } ] controllo_emails: func [ lista] [ lista_nera: copy [] avvertire: false foreach indirizzo lista [ temp2: length? parse indirizzo "@." if temp2 < 3 [ avvertire: true append lista_nera indirizzo ] ] if avvertire = true [ alert reform ["The following addresses are NOT correct:" lista_nera ]] ] assemblaggio: func [ /local thedate] [ either attach_contr/data [il_content: rejoin [ "multipart/related; boundary=^"" c_lay/text "^"" ] ] [ il_content: "text/html; charset=ISO-8859-15" ] ;we must set an correct RFC 822 standard format date ;or our emails will be identified as spam thedate: copy "" if now/weekday = 1 [ append thedate "Mon, "] if now/weekday = 2 [ append thedate "Tue, "] if now/weekday = 3 [ append thedate "Wed, "] if now/weekday = 4 [ append thedate "Thu, "] if now/weekday = 5 [ append thedate "Fri, "] if now/weekday = 6 [ append thedate "Sat, "] if now/weekday = 7 [ append thedate "Sun, "] append thedate reform [parse (to-string now/date ) "-"] append thedate " " append thedate now/time append thedate " " tzone: (to-integer now/zone) / 3600 either (sign? tzone) = 1 [ append thedate "+"] [ append thedate "-"] if tzone < 10 [ append thedate "0"] append thedate tzone append thedate "00" set-net config ;now we construct the header il_header: make object! [ X-REBOL: "View 2.7.6.3.1 http://WWW.REBOL.COM" Subject: to-string oggetto/text From: to-email config/1 Return-Path: to-email config/1 To: to-email config/1 Date: copy thedate MIME-Version: "1.0" Content-Type: il_content ] ] view layout [ across title "Mass mailing" return btn-help [ view/new aiuto_lay] text version return button "Settings" [ email_fl/text: to-string config/1 smtp_fl/text: to-string config/2 smtpuser_fl/text: to-string config/7 smtppass_fl/text: to-string config/8 show [email_fl smtp_fl smtpuser_fl smtppass_fl ] view/new configurazione_lay ] button "Reload last" [ oggetto/text: to-string config/9 a_lay/text: to-string config/10 b_lay/text: to-string config/11 c_lay/text: to-string config/12 ritardo/text: to-integer config/13 testo: read/string to-file config/10 db_mail2: read/lines to-file config/11 led1/data: true led2/data: true led3/data: true led4/data: true show [ oggetto a_lay b_lay c_lay led1 led2 led3 led4 ritardo] ] return led1: led text "Subject:" oggetto: field "subject" [led1/data: true show led1] return led2: led button "Body message" [ corpo_ind: request-file either (parse (to-string corpo_ind) [thru ".eml" end]) [ a_lay/text: to-string corpo_ind show a_lay testo: read/string to-file corpo_ind led2/data: true show led2 ] [ alert "It isn't a valid eml file!"] ] a_lay: field "no text file loaded, html files are the best!" return led3: led button "Email list" [ temp: to-file request-file db_mail: read temp db_mail: parse db_mail none sort db_mail db_mail2: copy unique db_mail write/lines temp db_mail2 ;scrive il file su hdd controllo_emails db_mail2 b_lay/text: to-string temp show b_lay led3/data: true show led3 ] b_lay: field "no email list file loaded" return text "Do you want to use attachment or embedding images?" attach_contr: check true [ if not (attach_contr/data) [ hide [ led4 testo_bound c_lay] ] if attach_contr/data [ show [led4 testo_bound c_lay]] ] return led4: led testo_bound: h3 "Boundary string (optional)" c_lay: field "es. boundary" [led4/data: true show led4 ] return text "Retard:" button 22x22 "+" [temp: to-integer ritardo/text temp: temp + 1 ritardo/text: to-string temp show ritardo ] ritardo: field 40 "2" button 22x22 "-" [temp: to-integer ritardo/text temp: temp - 1 if temp < 1 [temp: 1] ritardo/text: to-string temp show ritardo ] return button red "MASS MAILING!" [ counter: 0 b: length? db_mail2 a: confirm reform ["You are going to send" b "emails. I already deleted double entries. Do you want to proced?"] if a = true [ ;saving configurations poke config 9 to-string oggetto/text poke config 10 to-file a_lay/text ;body message poke config 11 to-file b_lay/text ; emails list poke config 12 to-string c_lay/text ; boundary string poke config 13 to-string ritardo/text ; retard salvatutto config ;save configuration ;sending emails foreach record db_mail2 [ assemblaggio ;we now assemble the email il_header/To: record counter: counter + 1 sped_lay/text: reform ["Sending email n." counter] show sped_lay send/header ( to-email record ) testo il_header wait to-integer ritardo/text write %errors.log reform ["Last sent email is: " record] ] alert reform ["Finished! You sent" counter "emails."] sped_lay/text: reform [ "Finished! You sent" counter "emails." ] show sped_lay ] ] return sped_lay: text red "____________________________" ] Notes
|