會員註冊 / 登入  |  電腦版  |  Jump to bottom of page

Linux/Unix » 在Shell Script中寄送檔案當作郵件附件

發表人: andowson, 七段學員
2008-12-02 21:29:10
最近公司要辦研討會,需要寫一個報名網頁,收集參加研討會人員的資料,然後每天下午五點時將報名資料寄送給相關人員,由他們再處理後續的準備事項,所以需要處理下列需求:
1.將資料庫中的報名資料匯出成為一個檔案,例如csv,
2.然後再利用郵件附件方式寄送出去。
3.定時自動執行

第一項任務,因我們使用PostgreSQL 8.3,所以可以使用COPY指令來完成,例如報名資料表名字叫作attendee,為避免寫入權限的問題,我們將其寫入到/tmp/attendee.csv下,同時將其表頭一併輸出(注意:這項功能需要PostgreSQL 8.1版本以上才支援)
copy attendee to '/tmp/attendee.csv' csv header

因為要使用COPY指令需要到postgres這個使用者的權限,故我們可以將上述指令存檔為export.sql存放到/var/lib/pgsql目錄下
然後再利用su方式來完成:
su - postgres -c "psql seminar postgres -f /var/lib/pgsql/export.sql"

第二項任務可利用mutt這個程式來執行
$ mutt -s "報名資料表" -a /tmp/attendee.csv pm@mycompany.com -c boss@mycompany.com,partner@other.com < /dev/null

如果沒有mutt可以透過yum -y install mutt來安裝

完整的shell script如下:

#!/bin/bash
su - postgres -c "psql seminar postgres -f /var/lib/pgsql/export.sql"
mutt -s "報名資料表" -a /tmp/attendee.csv pm@mycompany.com -c boss@mycompany.com,partner@other.com < /dev/null


第三項任務就是排定cron job即可,在/etc/crontab中設定如下
01 17 * * * root /root/dump.sh

參考資料:
Sending files as mail attachments

發表人: andowson, 七段學員
2011-12-29 18:07:05
今天發現有些主機(REHL 3.3: mutt-1.4.1-3.4, RH Linux 7.3: mutt-1.2.5.1-1)使用mutt寄出來的信件寄件人會變成root<>,而被當成廣告信,接著遭到郵件伺服器的封鎖,因此有收不到信的狀況。
解決方法就是指定寄件人From:

mutt -e 'my_hdr from:客服中心<service@andowson.com>' -s "測試資料" -a /tmp/test.txt somebody@andowson.com < /dev/null


這樣子就可以正常收到信了

參考資料:
http://pegasus923.pixnet.net/blog/post/33608243-%E5%9C%A8linux%E4%B8%8A%E5%88%A9%E7%94%A8mutt%E6%8C%87%E4%BB%A4%E5%AF%84%E9%99%84%E5%8A%A0%E6%AA%94mail




會員註冊 / 登入  |  電腦版  |  Jump to top of page