SMTPのPLAIN認証が動いていなかった(サーバによっては動いていた気がする)ので直しました。PLAIN認証では、「authzid\0authcid\0passwd」をBase64でエンコードして送りますが、passwdの後ろに\0をつけてエンコードしてしまっていました。サーバ側がデコードした後でCの文字列として扱っているサーバだと動いていたのかも。