ギャバンITサービス
お菓子の家が作れるシステムエンジニアです

25番ポートでmailが飛ばなくなったのでsmtp認証を追加

サーバが起動したときとか、何かサービスが停止したときにはメールを飛ばす癖がついてる。 日常何気にメールを見てる半分はサーバからのレポートメールだったりする。 昔は25番ポートを使えばよかったけど、今は違ってきていて465とか587を使う。 自分が利用しているlolipopでもそういう流れらしい。 メールのセキュリティ強化における接続先変更のお願い - ロリポップ!レンタルサーバー lolipop.jp 去年の暮れに「順次で25番ポート使えなくしまーす」ってアナウンスあった。 465番を使えって書いてあったけど、本当にその番号でいいのか。 何番のポートを使えばいいのか メールのポート番号はややこしい。 解説されているサイトがいくつかあった。作者さんありがとう。 SMTPポートの適切な選び方─25、587、465、2525番ポートの違い kinsta.com ポート465と587の違いとは? | SendGridブログ sendgrid.kke.co.jp SMTP25番ポートと587番ポートの違い #ポート番号 - Qiita qiita.com lolipopのアナウンスは465番ってあったけど、587番を使うのが正解なんじゃないかと思う。 ということで587番の設定する。 設定した内容 postfixの設定ファイルに追記 何すればいいのかなって参考にさせてもらったサイトは2025年にはどっか行ってた。centosのサイトやししゃあないか。 https://centos.rcg.jp/ubuntu20_mailserver/ けっこう細かく書かれていて「メールサーバーのOP25B対策」のあたりを参考にさせてもらった。 postfixの/etc/postfix/main.cfの最後のほうに追記する。 1 2 3 4 5 6 relayhost = smtp.lolipop.jp:587 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter = plain 認証のための設定実施 sasl_passwdってファイルに認証設定を書いておいてpostfixに使ってもらう。 ...

 ⭐️

djangoをdockerコンテナで利用(13) - Google Cloudとローカルlinuxの環境切り替えスクリプト

djangoで作っている処理をローカルlinuxで開発し、Google Cloudの中に反映させる。 前回 にGoogle Cloudの本番環境を作った。 作り終わった直後、できてない件があるなって気づいた。 ローカル開発環境はcssで画面を緑色系にしてるのを、本番は青色にしたい DBは開発用のDBインスタンスを使ってるので切り替えたい ヘッダの中に「ログアウト」のリンクがあるのが使えない これはGoogle Cloudとローカルlinuxでそれぞれtemplatesに置くhtmlやsettings.pyを用意しておき、コンテナを起動するときに切り替えればいい。 そこで、dockerのコンテナをdocker-composeで起動するとき、その直前にファイルコピーするようにスクリプトを書き換えた。 結果 ローカルlinuxでこう見えてるのが、 こうなる。 想定しているファイルを用意して上書きコピーしたら、すんなりできた。 データベースも複数あるのを切り替えて使えるようになった。 開発環境では好き放題データベース書き換えてテストできるのは必須やし。 以下、変更実施スクリプト作成内容。 前提 ローカルlinuxもGoogle Cloudも、docker-compose.ymlを複数使ってる。 webアプリ、mariadb、gitlab、ubuntu20のrdp環境を起動して帳簿入力 oracle起動してちょっとSQL試したいとか、検証するための環境を起動 centos7、centos8、ubuntu20など複数のOSフレーバーへsshできるようにし、OS利用してdockerfile作るための環境を起動 それぞれ永続化領域を持たせていて、「今日はcentosの検証作業」とか「今日は帳簿入力」とか使い分けてる。 dockerだと、サーバの役割をホイホイ変えられるから、必要なサービスを必要なだけ起動すればいい。 コンテナ起動のための基礎になるスクリプトはこう書いている。 1 2 3 4 5 6 7 8 DOCKER_ROOT=/Docker cd ${DOCKER_ROOT} ### cp -p docker-compose-GVISweb.yml docker-compose.yml ### cp -p docker-compose-DBMS.yml docker-compose.yml ### cp -p docker-compose-Client.yml docker-compose.yml docker-compose up -d cpしている箇所のうち、どれか1つだけコメント箇所を外して使ってる。 ...

 ⭐️

SQL - insert

通常insert 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $StrSQL = "insert into GVIS_log " . " ( logPeriod," . " logShubetsu, " . " clientIP, " . " userID, " . " Sousa, " . " Message, " . " browser, " . " ins_date, " . " ins_user " . " ) " . " values ( '" . $gv_ymd . " " . $gv_hhmmss ."' " . " , 'info' " . " , '" . $gv_IP ."' " . " , '" . $gv_User ."' " . " , '" . $arg1 ."' " . " , '" . $arg2 ."' " . " , '" . $gv_browser ."' " . " , '" . $gv_ymd . " " . $gv_hhmmss ."' " . " , '" . $gv_User . "' " . " ) " 抽出内容をinsert 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $StrSQL2 = " insert into GVIS_keihi". " \n" . " select ". " \n" . " '" .$InputParm2_yyyy. "-" . $InputParm2_mm . "-01' as workPeriod,". " \n" . " workShubetsu,". " \n" . " workPriority,". " \n" . " '" .$InputParm2_yyyy. "-" . $InputParm2_mm . "-01' as workPeriod,". " \n" . " Kamoku,". " \n" . " Tehai,". " \n" . " Kng,". " \n" . " Biko,". " \n" . " '" . $gv_DATE . "' as ins_date,". " \n" . " '" . $gv_user . "' as ins_user,". " \n" . " '" . $gv_DATE . "' as upd_date,". " \n" . " '" . $gv_user . "' as upd_user". " \n" . " from GVIS_keihi as t1". " \n" . " where year(workPeriod) = " . $InputParm1_yyyy. " \n" . " and month(workPeriod) = " . $InputParm1_mm. " \n" . " and workPriority < 2001 \n" . " ; ". " \n"

SQL - select

データ取り出し例 1 select * from table ; 重複なしのデータ取り出し例 1 SELECT distinct Sousa FROM GVIS_log order by Sousa ; 内部結合 内部結合(INNER JOIN)とは、結合する両方のテーブルどちらにも同じキーが存在するレコードのみ残し、それ以外は切り捨てる 外部結合 2つのテーブルを結合するのは内部結合と同じだが、どちらか片方のテーブルにデータがあればレコードが取得 左外部結合 LEFT OUTER JOIN(左外部結合)とは、FROM句に結合するテーブルを書く時、左側に書いた方をメインテーブルにする外部結合。 その結果、左側のメインテーブルに存在するレコードは、仮に右側のテーブルに同じキーのレコードが無くても全て取得されるが、反対に右側のテーブルだけにしか存在しないレコードは取得されない。 例)顧客マスタから顧客番号で顧客社名と担当者名を得る。 1 2 3 4 5 6 7 8 9 select GVIS_mst_customer.CompanyName1, GVIS_mst_customer.CompanyPersonName1, GVIS_transaction.* from GVIS_transaction LEFT OUTER JOIN GVIS_mst_customer ON GVIS_mst_customer.GVIS_CustNo = GVIS_transaction.OrderCustNo order by OrderNo desc ; ...

SQL - stored procedure

通常-oracle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 SQL> create or replace procedure sample_proc(v_id in char,v_name out varchar2) as 2 begin 3 dbms_output.put_line('v_id:' || v_id); 4 v_name := 'なまえ'; 5 end sample_proc; 6 / プロシージャが作成されました。 SQL> variable v_name varchar2(10) SQL> execute sample_proc('ID01',:v_name) v_id:ID01 PL/SQLプロシージャが正常に完了しました。 SQL> print v_name V_NAME -------------------------------- なまえ SQL> どこかで見つけたサンプル 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE OR REPLACE PROCEDURE RIVUS.STEP01_SELECT3(P_DATA_1 IN VARCHAR2) IS CURSOR cDual(P_DATA_2 VARCHAR2 := 'CURSOR param') IS SELECT P_DATA_1 COLNAME_1 FROM DUAL UNION ALL SELECT P_DATA_2 COLNAME_1 FROM DUAL ; vRec cDual%ROWTYPE; BEGIN OPEN cDual('yyy') ; -- 引数付きのカーソルをオープン LOOP FETCH cDual INTO vRec; -- カーソルの内容をフェッチする EXIT WHEN cDual%NOTFOUND; DBMS_OUTPUT.PUT(cDual%ROWCOUNT || ':'); DBMS_OUTPUT.PUT_LINE(vRec.COLNAME_1); END LOOP; CLOSE cDual; -- 使用済のカーソルは必ずクローズすること END; / -- -- 実行結果 SQL> call step01_select3('SELECT3'); 1:SELECT3 2:yyy コールが完了しました。