qmail-toaster vmoddomlimitsコマンド

Vmoddomlimits – QMail-Toaster

vmoddomlimits: usage: [options] domain options: -v ( display the vpopmail version number )

-d ( use the vlimits.default file, instead of domain )
-S ( show current settings )
-D ( delete limits for this domain, i.e. switch to default limits)
-Q quota-in-megabytes ( set domain disk quota, ‘100’ = 100 MB )
-q quota-in-bytes ( set default user quota, ’10M’ = 10 MB )
-M count ( set domain max msg count )
-m count ( set default user max msg count )
-P count ( set max amount of pop accounts )
-A count ( set max amount of aliases )
-F count ( set max amount of forwards )
-R count ( set max amount of autoresponders )
-L count ( set max amount of mailing lists )

the following options are bit flags in the gid int field

-g “flags” (set flags, see below)
gid flags:
u ( set no dialup flag )
d ( set no password changing flag )
p ( set no pop access flag )
s ( set no smtp access flag )
w ( set no web mail access flag )
i ( set no imap access flag )
r ( set no external relay flag )

the following options are bit flags for non postmaster admins

-p “flags” (set pop account flags)
-a “flags” (set alias flags)
-f “flags” (set forward flags)
-r “flags” (set autoresponder flags)
-l “flags” (set mailinglist flags)
-u “flags” (set mailinglist users flags)
-o “flags” (set mailinglist moderators flags)
-x “flags” (set quota flags)
-z “flags” (set default quota flags)
perm flags:
a ( set deny all flag )
c ( set deny create flag )
m ( set deny modify flag )
d ( set deny delete flag )

いつも忘れてしまうのでメモ。
> vmoddomlimits -g dpswir ドメイン名
で、メール送受信、パスワード変更とか停止。

> vmoddomlimits -D ドメイン名
で解除

vdominfoコマンド2

前回のエントリーで書いた、vdominfoコマンド。

dirを取得したいので調べてたんですが、詳しい方から新情報。
%> /home/vpopmail/bin/vdominfo -d test.com
/home/vpopmail/domains/test.com

と、-d をつけることで、ディレクトリ情報だけを取得することができました。

vdominfoコマンド

忘れないうちにメモ。

vpopmailのコマンド、vdominfo。
登録したドメインの情報を表示してくれる。

%>/home/vpopmail/bin/vdominfo test.com
domain: test.com
uid: 89
gid: 89
dir: /home/vpopmail/domains/test.com

これ便利。DBで管理しているvpopmailだと、メールサーバのDBに接続するしかないと思ってたけど、これなら接続情報もたなくていいし。

ZendFramework 1.7.5でもメールの件名は文字化け

短い件名だと問題なかったんですが、長くなると後半が化けてしまいました。
ので、今まで通り、Zend/Mail.phpのsetFromとsetSubjectを修正。
setSubjectは以下のように修正しました。

//$this->_subject = $this->_encodeHeader($subject);
mb_language('ja');
$lang = mb_internal_encoding();
mb_internal_encoding('ISO-2022-JP');
$this->_subject = mb_encode_mimeheader($subject, 'ISO-2022-JP');
mb_internal_encoding($lang);

setFromも同じ要領で。

ZendFramework 1.7.5へ

ZendFramework1.5.2から現状不足している機能がなかったので、
そのままバージョンアップしてなかったんですが、今回Zend_Dateの日付計算で
不具合が出たので、最新の1.7.5にバージョンアップしました。

嬉しかった点は、Zend/Mail.phpの中身を編集しなくても
文字化けをしないように設定できるようになった部分。
これをやるのがおっくうでバージョンアップしてなかったのもあったので。
こんなふうにsetEncodingOfHeadersでbase64を指定できるようになってました。

public static function sendInfo($params)
{
  $mail = new Zend_Mail('ISO-2022-JP');
  $mail->setEncodingOfHeaders(Zend_Mime::ENCODING_BASE64);
  $mail->setBodyText(self::_encode(trim($params['body'])), 
            null, 
            Zend_Mime::ENCODING_7BIT)
     ->setSubject(self::_encode($params['subject']))
     ->setFrom('yyyy@yyyy', 'zzzz');
     ->addTo('xxxx@xxxxxx');
     ->send();
}

private static function _encode($str)
{
  return mb_convert_encoding($str, 'ISO-2022-JP', 'UTF-8');
}

少しはまったのが、Zend_Date。new Zend_Date(‘xxxx-xx-xx’)とやると
クラスを生成できてたのですが、Localeがうまく取得できなくなっているようでした。
以前、ソースをおったときは、ブラウザから情報を取得していたし、
今回ざっと見た時もそれっぽい部分があったのですが、なぜかLocaleでエラーになります。

Zend_Registryを使って、’Zend_Locale’に’ja_JP’を設定しておけば、
設定したLocaleを利用してくれるので、index.phpで設定して問題を回避しました。
ソースをちゃんと見たいところですが、今は問題解決が先です。

メールが送れない

ローカル環境(Mac OS 10.5)で開発をしているんですが、
プログラムからのメール送信ができない。。。

% sudo /usr/sbin/sendmail -bd -q1h

で、sendmailを起動したら、sendmailでエラーはでなくなったけど、
送信先にメールが届いていない。
gmailに送ってみた結果、以下のログが。

postfix/smtp[967]: connect to alt2.gmail-smtp-in.l.google.com[209.85.217.183]: Connection refused (port 25)
postfix/smtp[967]: connect to alt1.gmail-smtp-in.l.google.com[72.14.205.27]: Connection refused (port 25)
postfix/smtp[967]: connect to alt2.gmail-smtp-in.l.google.com[209.85.217.182]: Connection refused (port 25)
postfix/smtp[967]: connect to alt2.gmail-smtp-in.l.google.com[209.85.217.177]: Connection refused (port 25)

25番ポートで接続できないってことなのかと思い、
http://blog.dc-d.jp/archives/1002.html
を参考に、master.cfを編集し、再起動しても結果は変わらず。

一時間ほど検索しても、これだ!!って内容は見つからず。
/etc/mail/配下のファイルを変更する手法も見つかったが、これは自分で
sendmailをインストールした場合に有効そうだった。

また、時間見つけてやろうと思います。
これやったか?ってのを教えていただけると、大変助かります。

続2Zend_Mailで日本語本文が文字化け

昨日書いた対処により、Mac OS9 Outlook Expressでは化けなくなったが、
他のメーラーではまだ化けることがあるようでした。

そんなときに、会社のメールサーバ等に詳しい方から情報をもらいました。
日本語メールの本文のエンコーディングは、7bitでないといけないということを。
メールヘッダのContent-Transfer-Encodingの部分です。

というわけで早速変更してみました。
以前、Zend_Mime::ENCODING_BASE64としていた部分を、
Zend_Mime::ENCODING_7BITに変更です。

$mail = new Zend_Mail(‘ISO-2022-JP’);

$mail->setBodyText($text, null, Zend_Mime::ENCODING_7BIT);

これで、文字化け問題から解放されることを望みます。
また新たなメーラーで問題がおこりませんよーにー。

続Zend_Mailで日本語本文が文字化け

以前https://life.co-hey.com/2008/09/zend-mail-6.htmlという記事を書きましたが、的外れだった可能性がでてきました。

メールヘッダーがbase64になっていたのに、printableで送信していたため、
この対処を入れて様子を見ていたのですが、まだ文字化けする場合がありました。

Mac OS9で、Outlook Expressをの場合に文字化けする現象がでました。
いろいろ試したところ、以下の対処で文字化けしなくなりました。

$mail = new Zend_Mail(‘ISO-2022-JP’);
$mail->setBodyText($text):

上記のように、base64の指定をしない形に戻す。

次に、メール本文の最後に改行を入れる。

これでMac OS9 Outlook Expressでも文字化けしなくなりました。
誤った情報を書いてしまったことをお詫び致します。

Zend_Mailで日本語本文が文字化け

今回、メーラーによっては、日本語の本文が文字化けするという現象を確認。

調査したところ、通常、本文はPrintableでエンコードされて送信されていました。
なので、ここをbase64にてエンコードするように修正して解決。

$mail = new Zend_Mail(‘ISO-2022-JP’);

$mail->setBodyText($text):

と書いていた部分を以下のようにエンコード形式を指定して設定します。

$mail = new Zend_Mail(‘ISO-2022-JP’);

$mail->setBodyText($text, null, Zend_Mime::ENCODING_BASE64);

文字化けってほんとやっかいです。

Zend_Mailで日本語メールヘッダを扱う

以前、https://life.co-hey.com/2008/03/zend-mailfrom.htmlという記事を書きました。

ヘッダーをエンコーディングする際の処理を変更しようという内容でしたが、
今回追記しておいた方がいいなということあったので追記です。

mb_encode_mimeheaderでは、mb_internal_encodingの文字コードと、
mb_encode_mimeheaderの第2パラメタで指定した文字コードが一致しないと
正常に変換されない場合があるようです。

なので、以下ように書いておいた方が無難ですね

mb_encode_mimeheader('"'.$name.'"', 'ISO-2022-JP')

  ↓

$encode = mb_internal_encoding();
mb_internal_encoding('ISO-2022-JP');
mb_encode_mimeheader('"'.$name.'"', 'ISO-2022-JP');
mb_internal_encoding($encode);