php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

はじめてrubyを業務で使ってみました

はじめてrubyを業務で使ってみました

先日に携わっているサービスでメールが届かないというお問い合わせを頂いたとのことで調査してみることにしました。

まずは、メールの送信ログですよね。

該当のアドレスに送信されているのかを確認するとログには残念な結果が書かれていました。。。

blockされている。。。

対応自体がはじめてだったのでいろいろ調べてみるとメール送信先のサービス側ではじかれていて、そのメール送信先のサービスが利用しているブラックリストサービスでブラックリスト登録されたということらしい。

解決策は登録されているホストの解除依頼をブラックリストサービスに依頼すればいいみたいなんですが根本的になんで登録されたのかもわかっていない、、
更にはネットで調べた解除フォームにたどり着けないということでまずはなんでかを確認することにしました。

結果は意外と簡単でサービスに登録されていたアドレスが適当なものでもアドレス形式であればOKだったので、結果的に宛先不明メールを送っていることになり、それでスパム扱いで登録されたんだと思われます。※サービス作りが悪いですね。。

であれば宛先不明のメールを送信しないようにサービスに導入しないとまたブロックされてしまう。。

そこでバウンスなどの管理をできないかと調べて出てきたのが

sisitoとsisimai

というツール

sisitoは獅子唐のアイコンで気に行ってしまったのですがこちらはsisimaiで解析した結果を表示して管理するグラフィカルツールで結果的には使いませんでした。
sisimaiはバウンスメールなどをインプットして解析してアウトプットしてくれるのでこちらを使うことに。

sisimaiがrubyかperlなのでrubyを選択した結果、抽出後のアドレスに対して処理は書かなければならないのではじめて実践的なrubyを使ってみる事になったというなんとも前置きが長くなりましたが、以下は今回使ってわかったrubyの箇条書き程度のメモです。

今回は特の難しくはなくまずは宛先不明メールの解析がバウンスのメールボックスにはなく、deferredのフォルダにあったため、これをそのまま解析できなかったのでテキストファイルにして読み込んでDB保存して、サービスの方のアドレスを無効とする処理までです。

まずはdeferredを検索してキューIDでキューの内容をテキストファイル化するところです

target = Dir.glob '/path/deferred/*/*'
if target.is_a?(Array)
  target.each do |filename|
    sp_path = filename.split("/")
    queue_id = sp_path.last
    `sudo postcat -q #{queue_id} > ~/mail/deferred/#{queue_id}.txt`
  end
end

まずはdeferred以下にあるキューIDでバイナリファイル化されているものを検索してそのキューIDでpostcatで出力してそれをファイル化してみました。

#! /usr/bin/env ruby
require './sisimai_local'
require './setting'

sisi = SisimaiLocal.new
f = Dir.glob $deferred_dir + '/*'
if f.is_a? Array
  f.each do |fname|
    sisi.require_file(fname)
    result = sisi.get_mail.count > 0 ? sisi.check_mail() : nill
    result ? sisi.insert_address() : nil
  end
end

次にテキスト化したものをsisimaiにかませてアドレスを抽出してデータベースへ登録しているんですがせっかくなのでクラス化してみたのでこれだとよくわかりませんね。

かませるsisimaiの関数がこちら
require 'sisimai'
Sisimai.make(filename)

$deferred_dirはテキスト化したファイルで一覧を取得してループしています。
そのファイル名とパスでsisimaiに噛ませた結果をローカルのsisimaiクラスで保存しています。
sisi.check_mailはuserunknownか確認していてもしそうであるならDB登録するというものです。

ちょっとクラス化したところもあるので全体がわからないのですが、rubyではじめてファイルの検索、文字列分割、DB接続、ループや三項演算子などを使ってみた記事でした。

見えてないところもあるのでまとめ

ファイル検索
Dir.glob '/path/*'

文字列分割
text.split("/")

DB接続(Mysql2)
require 'mysql2'
connection = Mysql2::Client.new(
  :host => @@host,
  :username => @@username,
  :password => @@password,
  :database => @@database
);

クエリの実行
query = %q{insert into tablename value(?, ?, ?, ?) }
statement = connected.prepare(query)
result = statement.execute(1, 2, 3, 4)

日付関数
datetime = DateTime.now.strftime("%Y-%m-%d %H:%M:%S")

ループ
names.each do |name|
  puts name
end

今回はこんなことを学びました!
たまたま実務に関連したので触れましたが自分でももっと使っていきたいと思います!!

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする