Script Library: 1238 scripts
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

Archive version of: massmailer.r ... version: 18 ... crazyaxe 3-Jan-2011

Amendment note: Now it's very easy to use! || Publicly available? Yes

Rebol [title: "Mass mailer"
    version: 1.3.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 
; 10 body message
;  11 email list
; 12 obsolete
; 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. 
Now this software works with any email. 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 [ ] [
	 	
	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:  email/Subject
		From:   to-email config/1
		Return-Path: to-email config/1
		To: to-email config/1
		Date: to-idate now  ;we must set an correct RFC 822 standard format date or our emails will be identified as spam
		MIME-Version:  "1.0"
		Content-Type: email/Content-Type
		]
	]


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
		led2: led
	button "Email" [ 
		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
			email: import-email testo
			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 "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  email/Subject ;Subject
			poke  config 10 email/Content ;body message
			poke  config 11 to-file b_lay/text ; emails list
			poke  config 12 "@@@" ; obsolete
			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 )    email/Content  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