Actionmailerで解析できるはずなのだけど、うまくできなかったのでTmailで実現してみた。
まず対応するモデルを作成
ruby script/generate mailer Mailget
で、モデルを修正
require 'tmail'
require 'kconv'
class Mailget < ActionMailer::Base
def receive(email)
entry = Entry.new
mailadd = TMail::Mail.parse(email)
entry.from = mailadd.from[0]
entry.discription = mailadd.body.to_s.toutf8
entry.save
end
end
あとは、postfixで受信したメールを流してやる。
testアカウントできたメールを処理するように設定。
virtualの設定
# sudo vim /etc/postfix/virtual
下記を一番下に追記
test.example.com anything
test@test.example.com test
aliasesの設定
# sudo vim /etc/aliases
mailer-daemon: postmaster
postmaster: root
test: "| /usr/bin/ruby /var/www/mail/script/runner -e production 'Mailget.receive STDIN.read'" ※追記
これでpost@test.example.com宛にメールがきたら、解析して、DBに送信のメールアドレスと本文を日本語で入れる。
うまく処理されているかどうかをログで確認して終了
# vim /var/log/maillog
もしDBなどにうまく書き込めていなければ、パーミッションのエラーの可能性があるので、その時は
777などに変更してください。
2011年5月15日日曜日
serversmanにpostfixを導入
最初からsendmailが入っているみたけど、postfixにしたかったので、導入する。
まずはドメインの設定
mx mail.example.com 10
a mail.example.com xxx.xxx.xxx.xxx
サーバのホストネームを設定
# sudo vim /etc/sysconfig/network
→ HOSTNAME="example.com” ※追加
次にオレオレ証明書の導入
# sudo yum list mod_ssl
# cd /etc/pki/tls/certs
# make server.key ※パスワードを入力
apache再起動時に毎回パスワードを聞かれるようになるので、修正。下記を入力
# sudo openssl rsa -in server.key -out server.key
# sudo make server.csr ※Country Name と Common Name以外は空白でOK。個人的には全部空白でしてしまったけど。。。
# openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 3650
# openssl x509 -in server.pem -outform DER -out server.der
# sudo chmod 400 server.key
# sudo chmod 400 server.csr
# sudo chmod 400 server.pem
# sudo vim /etc/httpd/conf.d/ssl.conf
→ DocumentRoot "/var/www/html" ※コメントアウト
→ SSLCertificateFile /etc/pki/tls/certs/server.pem ※書き換え
→ SSLCertificateKeyFile /etc/pki/tls/certs/server.key ※書き換え
# sudo /etc/init.d/httpd restart
証明書を使えるようにする。
# yum install cyrus-sasl-md5 cyrus-sasl-plain
システムアカウントとの連携
# sudo vim /etc/sysconfig/saslauthd
→ MECH=shadow ※変更
# sudo /etc/init.d/saslauthd restart ※リブート
# sudo /sbin/chkconfig saslauthd on
次にpostfixの導入
# sudo yum remove sendmail
# sudo yum install postfix
# sudo vim /etc/postfix/main.cf
→ myhostname = mail.example.com ※追加
→ mydomain = temog.info ※追加
→ myorigin = $mydomain ※追加
→ inet_interfaces = all ※コメントアウト解除
→ #inet_interfaces = localhost ※コメントアウト
→ home_mailbox = Maildir/ ※コメントアウト解除
→ #mydestination = $myhostname, localhost.$mydomain, localhost ※コメントアウト
→ mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ※コメントアウト解除
→ smtpd_banner = $myhostname ESMTP MyMTA(0.1) ※追加
最終行に追加
----------------------------------
# smtp auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# 受信メールサイズ制限(10M)
message_size_limit = 10485760
# ssl setting
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.pem
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_schache
----------------------------------
設定ファイルの修正
# sudo vim /etc/postfix/master.cf
→ smtps inet n - n - - smtpd ※コメントアウト解除
→ -o smtpd_tls_wrappermode=yes ※コメントアウト解除
→ -o smtpd_sasl_auth_enable=yes ※コメントアウト解除
メールを保存する場所を作成
# cd
# mkdir -p Maildir/{new,cur,tmp}
# chmod -R 700 Maildir/
新規アカウントを作った場合に、自動的につくられるように
# sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# sudo chmod -R 700 /etc/skel/Maildir/
dovecotのインストール
# sudo yum -y install dovecot
# sudo vim /etc/dovecot.conf
→ protocols = imap imaps pop3 pop3s ※コメントアウト解除
→ mail_location = maildir:~/Maildir
設定の反映と起動
# sudo /etc/init.d/dovecot restart
# sudo /sbin/chkconfig dovecot on
まずはドメインの設定
mx mail.example.com 10
a mail.example.com xxx.xxx.xxx.xxx
サーバのホストネームを設定
# sudo vim /etc/sysconfig/network
→ HOSTNAME="example.com” ※追加
次にオレオレ証明書の導入
# sudo yum list mod_ssl
# cd /etc/pki/tls/certs
# make server.key ※パスワードを入力
apache再起動時に毎回パスワードを聞かれるようになるので、修正。下記を入力
# sudo openssl rsa -in server.key -out server.key
# sudo make server.csr ※Country Name と Common Name以外は空白でOK。個人的には全部空白でしてしまったけど。。。
# openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 3650
# openssl x509 -in server.pem -outform DER -out server.der
# sudo chmod 400 server.key
# sudo chmod 400 server.csr
# sudo chmod 400 server.pem
# sudo vim /etc/httpd/conf.d/ssl.conf
→ DocumentRoot "/var/www/html" ※コメントアウト
→ SSLCertificateFile /etc/pki/tls/certs/server.pem ※書き換え
→ SSLCertificateKeyFile /etc/pki/tls/certs/server.key ※書き換え
# sudo /etc/init.d/httpd restart
証明書を使えるようにする。
# yum install cyrus-sasl-md5 cyrus-sasl-plain
システムアカウントとの連携
# sudo vim /etc/sysconfig/saslauthd
→ MECH=shadow ※変更
# sudo /etc/init.d/saslauthd restart ※リブート
# sudo /sbin/chkconfig saslauthd on
次にpostfixの導入
# sudo yum remove sendmail
# sudo yum install postfix
# sudo vim /etc/postfix/main.cf
→ myhostname = mail.example.com ※追加
→ mydomain = temog.info ※追加
→ myorigin = $mydomain ※追加
→ inet_interfaces = all ※コメントアウト解除
→ #inet_interfaces = localhost ※コメントアウト
→ home_mailbox = Maildir/ ※コメントアウト解除
→ #mydestination = $myhostname, localhost.$mydomain, localhost ※コメントアウト
→ mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ※コメントアウト解除
→ smtpd_banner = $myhostname ESMTP MyMTA(0.1) ※追加
最終行に追加
----------------------------------
# smtp auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# 受信メールサイズ制限(10M)
message_size_limit = 10485760
# ssl setting
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.pem
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_schache
----------------------------------
設定ファイルの修正
# sudo vim /etc/postfix/master.cf
→ smtps inet n - n - - smtpd ※コメントアウト解除
→ -o smtpd_tls_wrappermode=yes ※コメントアウト解除
→ -o smtpd_sasl_auth_enable=yes ※コメントアウト解除
メールを保存する場所を作成
# cd
# mkdir -p Maildir/{new,cur,tmp}
# chmod -R 700 Maildir/
新規アカウントを作った場合に、自動的につくられるように
# sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# sudo chmod -R 700 /etc/skel/Maildir/
dovecotのインストール
# sudo yum -y install dovecot
# sudo vim /etc/dovecot.conf
→ protocols = imap imaps pop3 pop3s ※コメントアウト解除
→ mail_location = maildir:~/Maildir
設定の反映と起動
# sudo /etc/init.d/dovecot restart
# sudo /sbin/chkconfig dovecot on
2011年5月9日月曜日
下位タグの考え方
次のサービスで使う予定なので、思いつきをメモ。
すでにあるのかもしれないけど、タグとディレクトリの間として、「下位タグ」の考え方を使いたい。
例えば「A」というタグがあって、その下位タグとして「A-1」や「A-2」があるという考え方。
「A-1」や「A-2」は「A」に従属していて、「A」は「A-1」「A-2」を包括している。
「A」が部署名で、「A-1」は個人名みたいな感じで使う。
まあたいしたことには使えなさそうだけど、個人的なメモとして。
すでにあるのかもしれないけど、タグとディレクトリの間として、「下位タグ」の考え方を使いたい。
例えば「A」というタグがあって、その下位タグとして「A-1」や「A-2」があるという考え方。
「A-1」や「A-2」は「A」に従属していて、「A」は「A-1」「A-2」を包括している。
「A」が部署名で、「A-1」は個人名みたいな感じで使う。
まあたいしたことには使えなさそうだけど、個人的なメモとして。
2011年4月18日月曜日
railsでセッション情報を更新する方法
config/initializars/session_storeの
:keyの上辺りに
:expire_after => 2.years
を記述すれば、最終セッションから2年伸びる。
これでブラウザを落としてもセッション情報が更新される。
:keyの上辺りに
:expire_after => 2.years
を記述すれば、最終セッションから2年伸びる。
これでブラウザを落としてもセッション情報が更新される。
2011年4月16日土曜日
ServersmanでNokogiriを使うときは気をつけろ
serversmanってよりCentOSだけど。
CentOS上で提供されているlibxmlのバージョンが少し古く、Nokogiri自体のバージョンが一緒でも、ローカル環境と違った動きをすることがある。
なので、バージョンをあげてあげよう。
# wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
# tar xvzf libxml2-2.7.8.tar.gz
# cd libxml2-2.7.8
# sh configure
# make check
# sudo make install
多分これで出来るはず。
CentOS上で提供されているlibxmlのバージョンが少し古く、Nokogiri自体のバージョンが一緒でも、ローカル環境と違った動きをすることがある。
なので、バージョンをあげてあげよう。
# wget ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz
# tar xvzf libxml2-2.7.8.tar.gz
# cd libxml2-2.7.8
# sh configure
# make check
# sudo make install
多分これで出来るはず。
2011年4月14日木曜日
SBI証券のサイトから、リアルタイム株価を取得する方法
SBI証券のサイトから、リアルタイム株価を取得する方法
通常のサイトはよく分からなかったので、バックアップサイトから取得する。
ログインして取得するのでIDとパスワードが必要。
mechanizeすげーけど、難しい……
twitterとかに投稿するようにしたり、サーバに負荷かけるようにしたらあかんよ、一応。
通常のサイトはよく分からなかったので、バックアップサイトから取得する。
ログインして取得するのでIDとパスワードが必要。
require 'rubygems'
require 'mechanize'
require 'kconv'
$id = ''
$pass = ''
stockcode = ['9501']
def stockprice(stockcode)
# SBI証券にログイン
agent = Mechanize.new
agent.get( 'https://k.sbisec.co.jp/bsite/visitor/top.do' )
agent.page.encoding = 'utf8'
agent.page.form_with('form1'){|form|
form['username'] = $id
form['password'] = $pass
form.click_button
}
# 株価データの取得
stockcode.each do |stock|
agent.get( 'https://k.sbisec.co.jp/bsite/price/search.do' )
puts agent.page.uri
agent.page.form_with(:name => nil ){|form|
form['ipm_product_code'] = stock
form.click_button
}
print stock, "の現在値は", agent.page.at('font.ltext').text, "円¥n"
end
end
stockcode.each do |stockcode|
stockprice(stockcode)
end
mechanizeすげーけど、難しい……
twitterとかに投稿するようにしたり、サーバに負荷かけるようにしたらあかんよ、一応。
2011年4月13日水曜日
ページ内からリンクの貼られている画像だけを保存する方法
require 'rubygems'
require 'nokogiri'
require 'open-uri'
url = 'http://yahoo.co.jp'
doc = Nokogiri.HTML(open( url ))
doc.css('a').css('img').each do |f|
img_url = f.attribute('src').value
puts img_url
filename = File.basename(img_url)
open(filename, 'wb') do |file|
open(img_url) do |data|
file.write(data.read)
end
end
end
ちなみに純粋に画像だけを取得するなら、
doc.css('img').each do |f|
に修正すればいい。
参考:
http://d.hatena.ne.jp/gan2/20080531/1212227507
require 'nokogiri'
require 'open-uri'
url = 'http://yahoo.co.jp'
doc = Nokogiri.HTML(open( url ))
doc.css('a').css('img').each do |f|
img_url = f.attribute('src').value
puts img_url
filename = File.basename(img_url)
open(filename, 'wb') do |file|
open(img_url) do |data|
file.write(data.read)
end
end
end
ちなみに純粋に画像だけを取得するなら、
doc.css('img').each do |f|
に修正すればいい。
参考:
http://d.hatena.ne.jp/gan2/20080531/1212227507
登録:
投稿 (Atom)