命令行下面发送邮件比较简单,恐怕都会使用。 $ echo "hello .. " | mail -s subject xxx@abc.com $ cat /path/to/file | mail -s subject xxx@abc.com $ mail -s subject xxx@abc.com << EOF hi the end.. EOF 上面这些方法都可以发送邮件。还有一种方法。 $ cat a.txt Subject: test From: xxx@abc.com To: xxx@abc.com hi sdfsdfsdf the end. $ cat a.txt | sendmail -t 这样可以把邮件头信息写到文件里面的,你也可以用 php,perl 来打印类似的信息给 sendmail [...]
这几天遇到了这两个错误,记录一下。 使用 perl 的 DBI 连接的时候,会提示 ora-00257 错误,这个用 三qlplus 估计也是一样的错误,注意时远程连接才出错。 DBI connect(‘host=db8.xxx;sid=nirv3′,’sirenmon’,…) failed: ORA-00257: archiver error. Connect internal only, until freed. (DBD ERROR: OCISessionBegin) at ./check_sdsdb line 26 CRITICAL : Can’t connect "db8.sds.cnb.yahoo.com" 同时,数据库的alert 里面有下面的信息 Errors in file /home/oracle/app/diag/rdbms/nirv/nirv3/trace/nirv3_arc1_9507.trc: ORA-19815: WARNING: db_recovery_file_dest_size of 268435456000 bytes is 100.00% used, and has 0 remaining bytes available. ************************************************************************ [...]
sendmail有个 /etc/aliases 配置文件,在里面可以给某个帐号设置alias,这样给这个alias发的邮件,都会给设置好的用户转发过去。要知道sendmail的帐号是和系统帐号联系在一起的,添加mail帐号得给系统添加帐号(qmail可以实现虚拟用户,或许sendmail也可以,而我不知道罢了)。而这个alias帐号却不是必须有得有系统帐号的,只要设置了alias,就可以给alias用户发邮件,就好像系统真有这么一个帐号一样。 关于 /etc/aliases 文件,这里有个文章有说明。下面复制几个例子。 # RFC 822 规定每个域名都需要有一个 "postmaster" postmaster : root # 将 postmaster 的邮件都转发给 root 帐号,当然你下面还可以将root帐号的邮件在转发给别人。 # 转发也可以转发到文件 # 比如这个,都说了nobody了还给发邮件,邮件都丢掉 nobody : /dev/null # 也可以通过管道作为另一个程序的输入 # 比如给procmail,它能实现的功能可就多了,比如可以根据邮件大小转发到不同的用户,或者调用spamassian、clamav来查垃圾邮件和病毒等 # 一个自动的bug跟踪程序 program-bugs: |/usr/local/bin/program-bug-tracker # 也可以转发到多个帐号,用逗号分隔就可以 project-list: johndoe@host1.uiuc.edu,jsmith@host2.uiuc.edu,someone@host.purdue.edu 可以看到功能还是很强悍的,尤其是可以 pipe 到程序,procmail、maildrop都是很不错的过滤程序,能实现很多其他的功能。 标题的要求是“抄送”某个帐号的邮件给别的用户,有点类似监控的意思。怎么实现呢?可能第一个想到的就是类似下面这种方法: somebody:other1,other2,somebody 这样是不是就能实现抄送呢?这样会造成死循环,呵呵。 看样子似乎只能通过pipe到程序实现了,看procmail、maildrop的文档还不够头疼的。其实还有个简单的方法,就是 .forward 文件。 .forward 文件位于用户的 home [...]
mutt用了一段时间之后发现对方发过来的附件的名字都是乱码,多次之后就觉得比较郁闷,每次都得自己修改名字,还得猜文件类型,很郁闷。google了一下,发现了解决办法,是因为mutt默认使用的是rfc2331来解码的,所以添加一个set rfc2047_parameters=yes就可以了,这样对方发过来的邮件就可以正常显示文件名称了。但是同时从那个网址得知,我发出去的附件,也是用rfc2331来编码的,这样到了对方那里,显然会乱码了。测试了一下,outlook里面提示有附件,可是打开是乱码,并且附件名称也不是实际的附件名称。foxmail里面不提示有附件,内容后面会显示几个乱码。 按照前面那个网址,找到了mutt的补丁,尝试了半天,不能在muttng上面正常使用,没办法只好不用muttng用mutt了。打上补丁之后,设置了 set create_rfc2047_parameters=yes 发出去的邮件就正常了。在mutt的patch list列表里面找到sidebar补丁,给mutt打了sidebar的补丁,用起来也还行了。同时,也把我的mutt升级到了1.5.13,比源里面的都新了。呵呵。 此外,还有一个问题就是如何对应不同的账号使用不同的smtp server。 本来从网上找了一个文章说到了这个操作如何实现,我也照搬了,发现似乎可以实现这个功能。可是最近才发现,我完全错了,实际上用的总是msmtp里面设置的那个default smtp server,郁闷坏啦,给头以及同事发了好多邮件了,用的都是我的gmail邮箱。 现在我已经解决了这个问题,用的是send-hook,如下。 send-hook . ‘my_hdr from:wd@aaa.com’ send-hook . ‘set sendmail=”/usr/bin/msmtp -a gmail”‘ send-hook ‘~t .*@bbb\.com\.cn$’ ‘my_hdr from:stef@bbb.com.cn’ send-hook ‘~t .*@bbb\.com\.cn$’ ‘set sendmail=”/usr/bin/msmtp -a bbb”‘ 这样,针对不同的mail,使用不同的sendmail程序。 发现mutt发送邮件的时候使用的是我的gmail邮箱的时候,我很郁闷,再加上发现他发送的附件在别人那里居然不认,让我就更郁闷了。立刻安装了thunderbird,并且设置好了他,打算以后就用他了。但是发现我已经习惯了mutt了,所以还是回头来给mutt打了补丁,做了修改,让他按照我的习惯来了。 用thunderbird后发现,很多事情不能按照我的意思来,很郁闷。
http://www.gbunix.com/htmldata/2005_06/15/25/article_1223_1.html 以下是qmail的数据流简图 qmail-smtpd — >>qmail-queue —>> qmail-send <<— qmail-rspawn <<— qmail-remote / | qmail-inject _/ qmail-clean \_ qmail-lspawn <<— qmail-local qmail中,每一条消息都发送到中央队列等待发送,由qmail-queue进程控制。它在以下情况被调用: 1、当产生本地消息时,qmail-inject进程调用qmail-queue。 2、qmail-smtpd准备SMTP协议下的投递邮件任务时调用它。 3、向前(forwarded)发送邮件时,qmail-local调用它。 4、退回邮件时,qmail-send调用它。 每封邮件接着由qmail-lspawn 和qmail-rspawn协助qmail-sned进程完成投递,最后由qmail-clean清除邮件队列。这四个进程是系统由始至终都在运行的,十分重要。 由smtpd从域外接受邮件之后,会交给queue处理(也就是2),之后转到qmal-send,然后看是域内还是域外,域内用qmail-lspawn,域外用qmail-rspawn。域内邮件调用qmail-local处理,如果遇到.qmail文件转发邮件(也就是上面的3),还会交给queue处理,如果没有,就直接投递给用户(?)。域外邮件调用qmail-remote处理,如果对方拒收邮件,他就会产生一个新的邮件(bounce),交给qmail-send,然后交给queue(也就是4?)。 [...]
当一个主机上的用户想要发送一个邮件给另一个主机上的用户时, 许多事情发生了, 这个场景后面的东西很多是不必要知道的那么确切的. 假设一个用户 Alice, alice@alpha.example.com 想要发送一个邮件给 Bob, bob@beta.example.com, 下面是发送接收过程: 1. Alice 用她的邮件用户代理(MUA)编写邮件, 比如使用 mutt 或者 pine. 她在 To 这一栏指定接收者, Subject 这一栏填写邮件主题, 加上邮件本身的文本部分. 整个邮件看起来是下面这样的: To: bob@beta Subject: lunch How about pizza? 2. 当她觉得这封邮件已经满意之后, 她指派 MUA 发送邮件. 3. 这时候, MUA 会加上附加的邮件头部分, 比如日期 Date 和邮件ID(Message-Id) 并且修改Alice输入的值(例如, 将 bob@beta 替换为”Bob <bob@beta.example.com>”) 下一步, MUA 将邮件注入邮件系统. 有两种方式进行注入: MUA 运行一个由邮件系统提供的为注入邮件为目的的程序; 或者使用SMTP协议和本地或者远程邮件服务器建立连接, [...]
http://sylvestre.ledru.info/howto/howto_qmail_spamassassin.php By Sylvestre Ledru June 2003 Version francaise Return to the linux page (02/04/2002), Bug fix : I just add a little bug fix for some OS which remove the +x on qmail-queue (the qmail-scanner is not concerned) (01/11/2003), Qmail-scanner : I had a new way of calling spamassassin client using qmail-scanner. (23/07/2003), Preferences : [...]
参考网址 http://lifewithqmail.org(中文版http://lifewithqmail.org/LWQ-CN.html) http://qmail.te8.com/rpms/glibc-2.3.1/(patch下载地址) http://www.fehcom.de/qmail/qmail.html http://www.pipeline.com.au/staff/mbowe/isp/vpopmail-mysql.htm http://bbs.chinaunix.net/forum/viewtopic.php?t=254662 ucspi-tcp http://cr.yp.to/ucspi-tcp.html ucspi-tcp-0.88.a_record.patch,ucspi-tcp-0.88.errno.patch,ucspi-tcp-0.88.nodefaultrbl.patch (或者)ucspi-tcp-0.88.a_record.patch,ucspi-tcp-0.88.errno.patch,ucspi-tcp-0.88.nobase.patch patch -d ucspi-tcp.xxx -p1 < ucspi-tcp-xxx.patch make&&make setup check daemontools http://cr.yp.to/daemontools.html daemontools-0.76.errno.patch package/install Adding svscanboot to inittab…init should start svscan now. cmd5checkpw http://www.fehcom.de/qmail/auth/cmd5checkpw-030_tgz.bin make&&make setup qmail 1.03 http://cr.yp.to/qmail.html http://www.fehcom.de/qmail/qmail.html http://www.fehcom.de/qmail/spamcontrol/spamcontrol-2311_tgz.bin tar zxvf spamcontrol-2311_tgz.bin 编辑conf-spamcontrol 建立用户组 groupadd nofiles useradd -g nofiles -d /var/qmail qmaild -s /sbin/nologin [...]
igenus需要给vpopmail数据库里添加几个表,同时还需要修改vpopmail表。添加了一个pw_id字段。没有这个这个字段,igenus里面不能修改密码(我就遇到这么一个情况)。
deferral: Unable_to_chdir_to_maildir._(#4.2.1) 这个是qmail找不到用户的收信目录所致。如果你是用vpopmail的虚拟域名来管理的,那看看你的control/locals文件,里面不能有虚拟域名,只能有实际域名(这个实际域名的意思应该是使用系统用户作为用户的域,而不是使用vpopmail的虚拟用户的域)。因此呢,如果不是用 vpopmail,那么可能是系统用户的目录权限设置不正确。 如果发生这个错误,首先保证你没有对user/assign做过手动修改,添加域名都是使用vpopmail的vadddomin命令来添加的,没有修改过~vopmail/domins目录以及其下面目录的权限和属主,然后修改了locals文件之后重启应该就没有问题了。 deferral: Uh-oh:_.qmail_has_prog_delivery_but_has_x_bit_set._(#4.7.0) 这个是因为你的.qmail文件设置了x属性,把.qmail文件的x去掉就ok了。这个.qmail文件就在你的domins/xxx.com下面,包括比如.qmail-default之类的文件,修改一下权限,去掉x就ok了。 454 oops, unable to write pipe and I can't auth (#4.3.0) 这个错误是在你打了smtp auth的补丁之后,却发现不能正常auth,输入了正确的用户名密码还是提示不正确。可以通过下面的命令来测试。 [root@caph qmail-smtpd]# telnet localhost 25 Trying 127.0.0.1… Connected to localhost. Escape character is '^]'. 220 xxx.com ESMTP ehlo 250-xxx.com 250-PIPELINING 250-8BITMIME 250-SIZE 104857600 250 AUTH LOGIN PLAIN CRAM-MD5 //显示这个通常表示你已经打好了补丁,不过这个是可以通过修改qmail-smtpd.c文件来定制的。 auth login 334 VXNlcm5hbWU6 awefaq23rasdf [...]