有不少博客支持邮件发布,比如Blogger和网易博客。因此使用python的smtplib来写了一个很简单的博客程序,使用wxPython做的图形界面,目前还仅支持发布纯文本…
发送到Blogger中文会乱码,不知道为什么。但是邮件里面又不是乱码。也许是网易的编码不一样,可是Google的邮件要SSL验证的,我不会。所以现在要使用中文的话只好用网易博客了…
截图:
Windows:
Linux:
Mac OS X:
源代码:
#!usr/bin/env python
# -*- coding: utf-8 -*-
#Filename: EM2Blog.py
"此程序可以通过未经SSL验证的网易邮箱快速发送一封邮件给固定收件人,\
达到诸如更新Blogger或者网易博客的目的。"
from smtplib import SMTP
import wx
#也可以更改为从配置文件导入信息:
#import ConfigParser
#config = ConfigParser.ConfigParser()
#config.readfp(open('config.ini'))
#smtpsvr = config.get('SMTP','server')
#name = config.ger('SMTP','username')
#pw= config.ger('SMTP','password')
#from_= config.ger('SMTP','from')
#blogmail= config.ger('SMTP','to')
#配置文件config.ini内容格式:
#[SMTP]
#server=smtp.163.com
#username=username@163.com
#password=password
#from=username@163.com
#to=blogmail@188.com
smtpsvr = 'smtp.163.com'
name = '@163.com'
pw = ''
from_ = '@163.com'
blogmail = 'blogmail@188.com'
#网易的邮件博客发布收件人都是blogmail@188.com
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "Blog发布程序",
size=(800,600))
panel = wx.Panel(self, -1)
#"self."这个东西很重要,有了它我才能在之后引用并获取其中被更改的内容
#否则后文获得文本控件内容的.GetValue()方法会失败。
self.subject = wx.TextCtrl(panel, -1,"标题",
size=(680,23),
pos=(10,10),
style=wx.TE_CENTER)#标题居中比较好看
self.body = wx.TextCtrl(panel, -1,"正文",
size=(765,515),
pos=(10,40),
style=wx.TE_MULTILINE)
self.button = wx.Button(panel, -1, "发布", pos=(699,9))
self.Bind(wx.EVT_BUTTON, self.OnSendClick, self.button)
self.Center()
def OnSendClick(self, event):
origHdrs = ['From:'+from_, 'To:'+blogmail,
#我使用的wxPython是unicode版本,输入的中文需要转码,否则报错
'Subject:'+self.subject.GetValue().encode('gb2312')]
origBody = [self.body.GetValue().encode('gb2312'), ]
#origMsg是把邮件头和邮件正文组合成一个可以发送的消息
#两部分之间空行隔开,从而符合RFC 2822的标准
origMsg = '\r\n\r\n'.join(['\r\n'.join(origHdrs),
'\r\n'.join(origBody)])
sendSvr = SMTP(smtpsvr)
wx.EVT_BUTTON = sendSvr.login(name,pw)
errs = sendSvr.sendmail(from_, blogmail, origMsg)
sendSvr.quit()
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = Frame()
frame.Show()
app.MainLoop()