Browse Source

Sent mass mailing to Finnish supporters. Added scripts to SVN.

svn path=/trunk/; revision=24321
tags/stw2018
otto 7 years ago
parent
commit
2cd04c3316

+ 1
- 1
support/export-support-as-csv-with-obscured-url-lkaf9847h59j7f4s5ds.php View File

@@ -2,7 +2,7 @@
// This file is temporary - now I just need so see the db contents
// to develop email confirmation function

//die("This file is for debugging only.");
die("This file is for debugging only.");

$db = new PDO("sqlite:../../../db/support.sqlite");


+ 39
- 0
support/massmailing/2012-09-13-fi.py View File

@@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
fromname = "FSFE"
fromaddr = "otto@fsfe.org"
subject = "Tiedote FSFE:n tukijoille Suomessa"
message_body_unwrapped = """
Hyvä FSFE:n tukija!

Kiitos että olet ilmoittautunut tukijaksi sivulla fsfe.org/support

Haluaisitko myös liittyä Fellowship-jäseneksi (http://fellowship.fsfe.org/) tai auttaa FSFE:tä osallistumalla sen toimintaan (http://fsfe.org/contribute/contribute.fi.html)?

FSFE kaipaa suomalaisten vapaaohjelmistojen käyttäjien ja kehittäjien apua erityisesti nyt, koska
* kuntavaalit lähestyvät ja poliitikoihin vaikuttamiseen pitää panostaa erityisesti nyt
* EU:n parlamentti käsittelee kohta yhtenäispatenttia, johon sisältyy vaara, että ohjelmistopatentit tulevat Suomeenkin
* Patenttisotien, mobiilialustakilpailun ja Windows 8:n myötä tuleva rajoitettu käynnistys -toiminto saattaa rajoittaa Linux-yhteensopivien laitteiden saatavuutta

Lisätietoa näistä aiheista löytyy FSFE:n sivuilta, mm.
http://fsfe.org/news/2012/news-20120907-01.fi.html
http://fsfe.org/campaigns/generalpurposecomputing/secure-boot-analysis.en.html

Suomen paikallisryhmän sivuilta näet mitä FSFE on tehnyt Suomessa viime aikoina:
http://fsfe.org/fi/

Vapaiden ja avoimen lähdekoodin ohjelmistojen käyttäjiä uhkaa ajoittain eräiden monikansallisten yritysten epäreilu toiminta. Tehokkain tapa puolustautua monikansallisia yrityksiä vastaan on tukea omia oikeuksiaan puolustavaa monikansallista järjestöä. Tästä syystä minä olen itsekin mukana FSFE:n toiminnassa.

Auta FSFE:tä seuraavin tavoin:
1. Kerro tutuillesi FSFE:stä ja suosittele sivua http://fsfe.org/support
2. Liity Fellowship-jäseneksi osoitteessa http://fellowship.fsfe.org/
3. Osallistu FSFE:n toimintaan esimerkiksi graafisena suunnittelijana, kääntäjänä, www-ylläpitäjänä tai tilaisuuksien järjestäjänä. Katso osallistumisvaihtoehtoja sivulla http://fsfe.org/contribute/contribute.fi.html


Kiitos!


Terveisin,

Otto Kekäläinen
FSFE:n Suomen paikallisryhmän koordinaattori
"""

+ 129
- 0
support/massmailing/massmailing.py View File

@@ -0,0 +1,129 @@
#!/usr/bin/python -u
# -*- coding: utf-8 -*-
# TODO: -u does not seem to have any effect

"""
This script does mass mailing using your Google account to avoid being blacklisted.
Please only send proper mass mails, like press releases and not spam.

Usage:
massmailing.py <username@gmail.com> <message file txt> <recipients list csv>

The script must be called with exactly these parameters, no less nor more.

Before execution the script asks for you password interactively.
"""

import sys, getpass, csv, time, smtplib
import textwrap
from email.mime.text import MIMEText
from email.header import Header

def main():
if len(sys.argv) != 4:
print __doc__
sys.exit(0)
else:
# Open connection
username = sys.argv[1]
password = getpass.unix_getpass("Enter password for account " + username + ": ")
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
print "Authenticating " + username
server.login(username,password)
print "Connection opened."

# Read each line fron recipients and send mail
messagefilename = sys.argv[2]
print "Opening " + messagefilename + ".py"
msg = __import__(messagefilename)
addressfilename = sys.argv[3]
print "Opening " + addressfilename
addresses = csv.reader(open(addressfilename, 'r'))
counter = 0
# Now take a pause to send one message to self and check everything is OK
toaddr = msg.fromaddr
toname = "Massmailer"
msg.message_body = ""
lines = msg.message_body_unwrapped.split("\n")
for line in lines:
if len(line) > 78:
w = textwrap.TextWrapper(width=78, break_long_words=False)
line = '\n'.join(w.wrap(line))
msg.message_body += line + "\n"
#msg.message_body = textwrap.fill(msg.message_body_unwrapped, 75, break_long_words=False, replace_whitespace=False)
# withouth replace_whitespace entire message is reflowed and old line breaks forgotten
# with it extra line breaks are added at odd places
massmail(server, msg.fromname, msg.fromaddr, msg.subject, msg.message_body, toaddr, toname)
print "A test message was sent. Check that it is OK."
check = "empty"
while not check in ['y','n']:
check = (raw_input("Can we continue with the mass mailing? (y/n) ")).lower()[0]
if check == "n":
print("Aborting...")
server.quit() # Maybe it closes automatically, but close it to be sure
sys.exit(0)
# OK, start sending
for row in addresses:
if not row:
continue
if row[0]:
firstname = row[0]
if row[1]:
lastname = row[1]
else:
firstname = ""
lastname = ""
toname = firstname + " " + lastname
toaddr = row[2]
sys.stdout.flush()
# Send mail
massmail(server, msg.fromname, msg.fromaddr, msg.subject, msg.message_body, toaddr, toname)
# Wait before sending next
delay = 3
for i in range(delay):
countertext = str(i) + "/" + str(delay) + "s until next"
sys.stdout.write(countertext + '\x08'*len(countertext))
sys.stdout.flush()
time.sleep(1)
counter += 1
# Finally, close the connection
print str(counter) + " mails sent! "
# extra space at the end to overwrite seconds counter
server.quit()
print "Connection closed."

def massmail(server, fromname, fromaddr, subject, message_body, toaddr, toname):
print "Sending to " + toname,
print "<" + toaddr + ">",
text = message_body
# no wordwrap, copy-pasting text from press release to article easier without
# text = textwrap.fill(text, 75)
msg = MIMEText(text, 'plain', 'utf-8')
msg['From'] = str(Header(fromname, 'utf-8')) + ' <' + str(fromaddr) + '>'
if toname:
msg['To'] = str(Header(toname, 'utf-8')) + ' <' + str(toaddr) + '>'
else:
msg['To'] = toaddr
msg['Subject'] = Header(subject, 'utf-8')
# force utf-8 since MIMEText() somehow generates a base64 encoded payload
# instead of utf-8 or quoted-printable
msg.set_payload(text)
msg.replace_header('Content-Transfer-Encoding', '8bit')
server.sendmail(fromaddr, toaddr, msg.as_string())
print "[OK]"

main()

+ 2
- 0
support/massmailing/supporters-fi-2012-09-11-with-errors.csv View File

@@ -0,0 +1,2 @@
Matti,Nurmi,mtnurmi@luukku.com,over quota
Jarmo ,Reinilä,jartre@gmail.coom,.coom

Loading…
Cancel
Save