# freenom
**Repository Path**: gp.coder/freenom
## Basic Information
- **Project Name**: freenom
- **Description**: Freenom域名自动续期。Freenom domain name renews automatically.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-10-09
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Freenom: freenom domain name renews automatically
[](https://scrutinizer-ci.com/g/luolongfei/freenom/build-status/master)
[](https://secure.php.net/)
[](https://scrutinizer-ci.com/g/luolongfei/freenom/?branch=master)
[](https://github.com/luolongfei/freenom/blob/master/LICENSE)
Documentation: English version | [中文版](https://github.com/luolongfei/freenom)
[📃 Why write this script](#--Why-write-this-script)
[🍭 Demo](#--Demo)
[🎁 Preparation](#--Preparation)
[📪 Setting up Gmail](#--Setting-up-Gmail)
[🤶 Telegram bot](#--Telegram-bot)
[🚧 Configuration script](#--Configuration-script)
[🎈 Add scheduled task](#--Add-scheduled-task)
[☕ Verification](#--Verification)
[❤ Donate](#--Donate)
[🌚 Author](#--Author)
[🎉 Acknowledgements](#--Acknowledgements)
[🥝 Open source agreement](#--Open-source-agreement)
### 📃 Why write this script
As we all know, Freenom is the only merchant on the planet that provides free top-level domain names, but it needs to be renewed every year for up to one year at a time. Since I applied for a bunch of domain names, and not at the same time,
So I felt frustrated every time I renewed, so I wrote this automatic renewal script.
### 🍭 Demo

Regardless of the success or failure of the renewal or the execution of the script, you will receive emails from the program. In the case of a renewal success or failure email, the email will include the number of days that the domain name has not been renewed.
### 🎁 Preparation
- Email of robot: Used to send notification emails.
- Your email: Used to receive notification emails sent by robots.
- VPS: Any server can be used. The system recommends `Centos7`, and the PHP version must be` php7.1` or above.
- No more
### 📪 Setting up Gmail
***
1.In `Settings > Forwarding and POP/IMAP`, tick
- Enable POP for all messages
- Enable IMAP

Then save your changes.
2.Allow less secure applications
After logging into Google Mail, visit [this page](https://myaccount.google.com/u/0/lesssecureapps?pli=1&pageId=none) and enable the application that is not secure enough.
Also, if prompted
> Do not allow access to account
After logging in to Google Mail, go to [this page](https://accounts.google.com/b/0/DisplayUnlockCaptcha) and click Allow. This situation is relatively rare.
### 🤶 Telegram bot
***
If you don't want to use email push, you can also use Telegram bot. In the `.env` file,
Change the value of `TELEGRAM_BOT_ENABLE` to `true` to enable the Telegram bot.
Similarly, change the value of `MAIL_ENABLE` to `false` to disable the mail push method.
Telegram bot has two configuration items, one is `chatID` (corresponding to `TELEGRAM_CHAT_ID` in `.env` file),
You can get your own id by sending `/start` to `@userinfobot` using your Telegram account,
The other is `token` (corresponding to `TELEGRAM_BOT_TOKEN` in the `.env` file),
your Telegram bot token, how to create a Telegram bot and how to get the token please refer to:
[Official Document](https://core.telegram.org/bots#6-botfather)
*This completes the settings related to notifications, followed by the configuration related to this program* :)
### 🚧 Configuration script
All operations are performed under Centos7 system, other Linux distributions are similar
#### Get the source code
```bash
$ mkdir -p /data/wwwroot/freenom
$ cd /data/wwwroot/freenom
# clone the repository source
$ git clone https://github.com/luolongfei/freenom.git ./
```
#### Configuration process
```bash
# Copy configuration file template
$ cp .env.example .env
# Edit configuration file
$ vim .env
# .env Each item in the file has a detailed description, which will not be repeated here. In short, you need to change all the items in it to your own. Note the format of the multi-account configuration:
# e.g. MULTIPLE_ACCOUNTS='@|@|@'
# Of course, if you only have a single account, you only need to configure FREEENOM_USERNAME and FREEENOM_PASSWORD. The configurations of single account and multiple accounts will be read together and duplicated.
# After editing, press "Esc" to return to the command mode, enter ":wq" and press Enter to save and exit. If you don't use vim editor, you can ask Uncle Google. :)
```
### 🎈 Add scheduled task
#### Install crontabs and cronie
```bash
$ yum -y install cronie crontabs
# Verify if crond is installed and started
$ yum list cronie && systemctl status crond
# Verify that crontab is installed
$ yum list crontabs $$ which crontab && crontab -l
```
#### Open the task form and edit
```bash
$ crontab -e
# Task content is as follows
# The meaning of this task is to execute the run file under /data/wwwroot/freenom/ at 9 AM every day
# Note: In some cases, crontab may not find your php path. The following command will output an error message in the freenom_crontab.log file. You should specify the php path: replace the following php with /usr/local/php/bin/php (based on the actual situation)
00 09 * * * cd /data/wwwroot/freenom/ && php run > freenom_crontab.log 2>&1
```
#### Restart the crond daemon (This step is required each time you edit the task form for the task to take effect)
```bash
$ systemctl restart crond
```
To check if the `Task` is normal, you can set the execution time of the above task to a few minutes, and then wait until the task execution is completed,
check the contents of the `freenom_crontab.log` file in the `/data/wwwroot/freenom/` directory for errors. Common error messages are as follows:
- /bin/sh: php: command not found
- /bin/sh: /usr/local/php: Is a directory
*(Click to expand or collapse)*
solution
>
> execute
> ```bash
> $ whereis php
> # Determine the location of php, the general output is "php: /usr/local/php /usr/local/php/bin/php", we choose: /usr/local/php/bin/php
> ```
> Now we know that php's path is `/usr/local/php/bin/php` (may be different according to the actual situation of your own system),
> and then modify the commands in the form task, change
>
> `00 09 * * * cd /data/wwwroot/freenom/ && php run > freenom_crontab.log 2>&1`
>
> to
>
> `00 09 * * * cd /data/wwwroot/freenom/ && /usr/local/php/bin/php run > freenom_crontab.log 2>&1`
>
> More information: [click here](https://stackoverflow.com/questions/7397469/why-is-crontab-not-executing-my-php-script)
>
Of course, if your `crontab` can correctly find the `php path` without error, you don't need to do anything.
*So far, all the configurations have been completed, let's verify if the whole process works* :)
### ☕ Verification
You can first change the value of `NOTICE_FREQ` in `.env` to 1 (Push notification every time the script is executed), and then execute
```bash
$ cd /data/wwwroot/freenom/ && php run
```
If nothing else, you will receive an email about the domain name.
If you encounter any problems or bugs, please mention [issues](https://github.com/luolongfei/freenom/issues). If freenom changes the algorithm and causes this project to fail,
Please mention [issues](https://github.com/luolongfei/freenom/issues) to inform me that I will fix it in time and maintain this project for a long time. Welcome star ~
### ❤ Donate
#### PayPal: [https://www.paypal.me/mybsdc](https://www.paypal.me/mybsdc)
> Every time you spend money, you're casting a vote for the kind of world you want .-- Anna Lappe

### 🌚 Author
- Main program and framework: [@luolongfei](https://github.com/luolongfei)
- English document: [@肖阿姨](#)
### 🎉 Acknowledgements
- [PHPMailer](https://github.com/PHPMailer/PHPMailer/) (Mail sending function depends on this library)
- [guzzle](https://github.com/guzzle/guzzle) (Curl library)
### 🥝 Open source agreement
[MIT](https://opensource.org/licenses/mit-license.php)