Google Mail LoaderのSMTP認証対応

 昨日の続きで、Google Gmail LoaderをSMTP認証ありで使うときSMTPサーバーへの接続でうまくいっていない原因を探ってみました。まずはSMTP認証はどうなっているのだろうと、ソースであるgmlw.pyを覗きます。
 ユーザー名はself.smtpusr、パスワードはself.smtppwdとして変数定義されています。で、これを検索して追いかけてみると、使われているのは最後のメッセージ表示部分だけでメール送信には使われていません。ユーザー名、パスワードを入力しても、使っているのはプログラム終了時の表示だけなのです。これは驚きました。驚愕的新事実的肩すかしというやつでしょうか。
 メール送信の関数は295行目から308行目の以下の部分で定義されています。

    # Send a Message (Internal)
   def _sendMessage(self):
      time.sleep(2)

      server = smtplib.SMTP(self.smtpsvr.get())
      server.set_debuglevel(1)
      if self.rcvorsn.get() == self.rcvtyps[1]:
         fullmsg = re.sub(r'From: .*', 'From: %s' % self.recipnt.get(),
                          self.msg.__str__( ) + '\x0a' + self.document, 1 )
         server.sendmail(self.recipnt.get(), self.recipnt.get(), fullmsg)
      else:
         fullmsg = self.msg.__str__( ) + '\x0a' + self.document
         server.sendmail(self.msg.getaddr('From')[1], self.recipnt.get(), fullmsg)
      server.quit()

 SMTPの接続関係をserverで作成して、server.sendmail()でメール送信、server.quit()で終了という流れです。やっぱりここに引数としてself.smtpusrやself.smtppwdは入っていません。ということで自分で実装してみました。
 元のソースにおいて

      server = smtplib.SMTP(self.smtpsvr.get())
      server.set_debuglevel(1)
      if self.rcvorsn.get() == self.rcvtyps[1]:

の部分に

      server = smtplib.SMTP(self.smtpsvr.get())
      server.set_debuglevel(1)
      if self.needath.get():
         server.login(self.smtpusr.get(), self.smtppwd.get())
      if self.rcvorsn.get() == self.rcvtyps[1]:

と、認証が必要な場合は最初にログインを実行する部分を2行書き足します。これで実行してみたところ、うまくいきました。やりました。
 最後に、こんな重要な機能をミスで積み忘れた、さらに長年多くの人が気づかなかった、最新のバージョン0.5bは2004年6月の日付です。というのは考えにくいので、なにか自分が見落としている可能性は高いと思います。でもまあこれで目的は達成されたのでいいかなぁ。ってところですね。

追記

 上記ソースを書き換えて。というのはMacでやっているのですぐにできましたが、Windows版ではどうなんでしょう。ソースを書き換えてもコンパイルが必要ですよねぇ。