keinos / auto-reply-sakura Goto Github PK
View Code? Open in Web Editor NEW✅ さくらインターネットのメールで定休日にメールを受け取った場合に、送信者に定型文を自動返信するだけの PHP スクリプトです。
License: MIT License
✅ さくらインターネットのメールで定休日にメールを受け取った場合に、送信者に定型文を自動返信するだけの PHP スクリプトです。
License: MIT License
「代表メアド」→(転送)→「担当メアド A」といった設定で、各々のメアドで自動返信の機能を有効にすると、2通の自動返信メールが相手に送られてしまう。(代表メアドと担当メアドAからの自動返信)
このパターンに限っては、「代表メアド」の自動返信を無効にすれば解決できる。(担当メアド A のみが反応するため)
しかし、「代表メアド」→(転送)→「担当メアド A」「担当メアド B」といった複数の転送先がある場合に問題が発生する。
「代表メアド」のみ自動返信を有効にすることで自動返信の重複は回避できるが、今度は各担当者に直接送られてきたメールは自動返信されなくなってしまう。
./template/
ディレクトリ内に設置./config/config.json
にパスとファイルの記載を必須とし、そのテキスト・ファイルをテンプレートとして使用する。「自動返信メールの内容を更新する」際の疎結合を高めるため。
例えば、独自 CMS/Wordpress といった「外部アプリなどから定型文を出力する」「FTP などによるアプロード」といった場合に、当アプリのディレクトリ内に保存を必須としてしまうと、それら外部要因と密結合してしまう。
つまり、「ディレクトリ構成が変わった」「テンプレート名が変わった」といった当アプリの仕様変更に対し、外部のアプリおよびユーザーにも仕様変更が必要になる。
Conf ファイルの指示により該当テンプレートを当アプリから参照するようにすることで、外部アプリやユーザー操作といった外部要因は、当アプリの仕様変更を気にする必要がなくなるので、より疎結合に近付く。
例えば「日曜日の夜18時から火曜日夜11:59まで」という条件に対応できるようにして欲しい。
火曜日の 11:59 は config.json
で Tuesday
を指定すれば問題ないので、日曜の 18:00 からトリガーできるようにして欲しい。
{
"weekday_to_reply": [
{
"weekday": "Sunday",
"begin": "8:00",
"end": "18:00"
},
{
"weekday": "Monday"
}
]
}
~/MailBox/<ユーザー>/.mailfilter
は、ユーザー側の GUI(Web の UI)操作が行われると上書きされるので、対象ユーザーの .mailfilter
に追記するスクリプトが欲しい。
% cd ~/suto-reply-sakura
% cat ./conf/user_auto_reply.json
{
"user1",
"user2",
"user3"
}
% ./auto-reply.php set user1 user2 user3
Adding auto-reply settings to:
user1 ... done
user2 ... done
user3 ... done
All done
% ./auto-reply.php unset user1 user2
Removing auto-reply settings from:
user1 ... done
user2 ... done
All done
自動返信メールの下部に、ユーザーのメール本文を付けて欲しい。
ユーザーから見ると、送り先とは違う(自動返信の)メールアドレスから返信が来るため、何に対してのメールか一瞬わかりづらいからです。(パソコンがウィルスに感染している印象を持たれるかもしれません)
現在 ./config/conf.json
では定休日の自動返信は曜日でしか指定できない。
年末、祝日など、日付を指定すると自動返信が働くようにできないか。
{
"mail_title_to_reply": "お問い合わせありがとうございます。",
"from": {
"email": "[email protected]"
},
"weekday_to_reply": [
"Sunday",
"Wednesday"
],
"holiday_to_reply": [
"2020/10/10",
"2020/10/12"
]
}
composer.lock
ファイルは composer.lock.debug
とリネームして提供しておいて .gitignore
で除外した方がいいと思います。
% cd ~/auto-reply-sakura
% composer update
...
% git status
On branch master
Your branch is up to date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
composer.lock
nothing added to commit but untracked files present (use "git add" to track)
conf.json
が下記の場合、ユーザーには送信者名が「自動返信」として届いて欲しい。
つまり、"自動返信"<[email protected]>
と送られて欲しい。
{
"mail_title_to_reply": "お問い合わせありがとうございます。",
"from": {
"name": "自動返信",
"email": "[email protected]"
},
"weekday_to_reply": [
"Sunday",
"Wednesday"
]
}
サーバーに composer
をインストール&リポジトリを clone
後、依存パッケージをインストールすると the requested PHP extension pcntl is missing from your system
エラーが出る。サーバーに pcntl
エクステンションがインストールされていないためだがレンタルサーバーなので php.ini
も触れない。
% composer install --no-dev
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- phpunit/php-invoker 1.1.4 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
- phpunit/php-invoker 1.1.3 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
- phpunit/php-invoker 1.1.2 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
- phpunit/php-invoker 1.1.1 requires ext-pcntl * -> the requested PHP extension pcntl is missing from your system.
- Installation request for phpunit/php-invoker ^1.1 -> satisfiable by phpunit/php-invoker[1.1.1, 1.1.2, 1.1.3, 1.1.4].
To enable extensions, verify that they are enabled in your .ini files:
- /usr/local/php/5.6/etc/php.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
Running update with --no-dev does not mean require-dev is ignored, it just means the packages will not be installed. If dev requirements are blocking the update you have to resolve those problems.
composer.json
の symfony/console
と phpunit/php-invoker
は suggest
パッケージなので必須ではないため phpunit/php-invoker
を削除。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.