分类 电脑 下的文章

使用 curl 批量向 iredmail 提交新邮箱用户和密码

需求:iredmail 免费版没有 api,除了官方带的工具外,有没其它方法可以批量创建账号呢?

尝试:可以使用 curl 来提交表单,用脚本循环提交。

##
# Configurations.
##

read -p "请输入iredmain管理台的登录网址URL,如 https://mail.anqun.org/iredadmin/login: " login_url
read -p "请输入iredmail的创建用户网址URL,如 https://mail.anqun.org/iredadmin/create/user: " create_url
read -p "请输入邮局的管理员用户名,如 postmaster@lan.anqun.org: " username
read -p "请输入邮局的管理员用密码: " password

read -p "请输入要添加用户的域名,如 lan.anqun.org: " domainname
read -p "请输入要添加用户的个数,如 100: " number

rm iredmail-users.txt
rm tmpcs.txt
rm cookie

# Path to temporary file which will store your cookie data.
cookie_path=cookie

action_url="$create_url/$domainname"

##
# Logic. Most likely you shouldn't change here anything.
##

curl -i -b $cookie_path -c $cookie_path -d "username=$username&password=$password" "$login_url"

curl -i -b $cookie_path -c $cookie_path -o tmpcs.txt --request GET "$action_url"

csrf_token=$(grep -oP '(?<=<input type="hidden" name="csrf_token" value=")[^"]*' tmpcs.txt)


for ((i=1; i<=$number; i++))
    do
        mailuser=$(strings /dev/urandom |tr -dc a-z0-9 | head -c8)
        mailpasswd=$(strings /dev/urandom |tr -dc a-z0-9 | head -c8)
        echo $mailuser@$domainname  $mailpasswd >> iredmail-users.txt

        data="csrf_token=$csrf_token&domainName=$domainname&username=$mailuser&newpw=$mailpasswd&confirmpw=$mailpasswd&cn=&preferredLanguage=en_US&mailQuota=1024&submit_add_user=Add"
        curl -i --cookie cookie --data "${data}" "$action_url"
done

参考:https://www.drupal.org/node/2045751

为 magento 网站后台启用双因素身份验证登录 - 谷歌身份验证器 - Two-Factor Authentication - google authenticator

需求:magento 2.4 以上版本默认为网站后台启用双因素身份验证登录,假如主机不支持smtp发信,怎么办呢?

尝试:

  1. bin/magento config:set twofactorauth/general/force_providers google # 设置使用谷歌验证器
  2. bin/magento config:set twofactorauth/google/otp_window 60 # 设置验证码有效期一分钟
  3. bin/magento security:tfa:google:set-secret liujia NJUGMZZUPFSGEZDHBI====== # 为 liujia 用户设置 NJUGMZZUPFSGEZDHBI====== 密钥;可在linux里使用 echo jhfg4ydbdg | base32 的命令来生成密钥
  4. 在谷歌浏览器里,安装“身份验证器”的扩展。添加新项,手工输入标识和密钥
  5. 在 magento 里登录,会提示输入由谷歌身份验证器生成的动态验证码,六位数字

首次登录,会提示需按邮件内容启用2fa
图1:首次登录,会提示需按邮件内容启用2fa

手工输入密钥后,谷歌身份验证器会动态生成验证码
图2:手工输入密钥后,谷歌身份验证器会动态生成验证码

登录网站后台时,会提示输入动态验证码
图3:登录网站后台时,会提示输入动态验证码

参考:

MageSuite 的 GDPR 模块默认隐藏了客户信息 - magesuite-gdpr - hide customer data default

现象:安装好 magesuite 套件后,在网站后台查看订单列表和详情页,大部分客户信息,如姓名、地址等显示为星号,看不到完整内容。

尝试:因为 magesuit 的 gdpr 模块默认是将magento的管理员组设置的权限是 hide customer data,所以即使是magento的管理员,默认也查看不到完整的客户信息。可以在magento的用户组权限里,为资源权限 Roles Resource 选择“自定义” Custom,除 GDPR - Hide customer data 项外全部勾选。意思即是不为管理员组的用户启用“隐藏客户信息”的功能。

不显示完整的客户信息,带星号
图1:不显示完整的客户信息,带星号

自定义管理员组的资源权限
图2:自定义管理员组的资源权限

客户信息现在能正常显示了
图3:客户信息现在能正常显示了

参考:

通过浏览器访问网址 - 使用imap协议 - 获取邮件内容 - 关键词搜索 - php-imap-reader

需求:通过URL,提交邮箱的用户名和密码,获取到邮件内容。通过关键字搜索邮件。

尝试:用 php-imap-reader 试试。

<?php
date_default_timezone_set('Asia/Shanghai');

require 'src/phpImapReader/Email.php';
require 'src/phpImapReader/EmailAttachment.php';
require 'src/phpImapReader/Reader.php';

use benhall14\phpImapReader\Email;
use benhall14\phpImapReader\EmailAttachment;
use benhall14\phpImapReader\Reader;

// define('IMAP_USERNAME', 'postmaster@lan.anqun.org');
// define('IMAP_PASSWORD', 'mima');
define('IMAP_MAILBOX', '{127.0.0.1:993/imap/ssl/novalidate-cert}'); // For example: {outlook.office365.com:993/imap/ssl/novalidate-cert}
define('ATTACHMENT_PATH', __DIR__ . '/attachments/');

define('IMAP_USERNAME', $_REQUEST['n']);
define('IMAP_PASSWORD', $_REQUEST['p']);

// echo $_REQUEST['n'];
// echo $_REQUEST['p'];
// echo $_SERVER["QUERY_STRING"];

try {
    $imap = new Reader(IMAP_MAILBOX, IMAP_USERNAME, IMAP_PASSWORD, ATTACHMENT_PATH);
    
    $imap->limit(2)->get();

    foreach ($imap->emails() as $email) {
        echo '<div>';
            
        echo '<div>' . $email->fromEmail() . '</div>';
            
        echo '<div>' . $email->subject() . '</div>';
            
        echo '<div>' . $email->date('Y-m-d H:i:s') . '</div>';

        if ($email->hasAttachments()) {
            foreach ($email->attachments() as $attachment) {
                echo '<div>' . $attachment->filePath() . '</div>';
            }
        }
        
        #print_r($email->plain());
        #print_r($email->html());

        #$plainText = $email->plain();
        #$extractedText = substr($plainText, 0, 100); // 提取前100个字符
        #echo $extractedText;

        // 假设 $email 是一个包含邮件信息的对象
        $plainText = $email->plain(); // 获取 plain 属性内容

       // 使用正则表达式来匹配并提取所需文本内容
       // $pattern = '/Password: \w{8}/'; // 用你的实际匹配模式替换 YourPatternHere
        $pattern = '/\b\d{6}\b/'; // 用你的实际匹配模式替换 YourPatternHere
       if (preg_match($pattern, $plainText, $matches)) {
        $extractedText = $matches[0]; // 提取匹配到的文本内容
        echo "Extracted text: " . $extractedText;
    } else {
        echo "Pattern not found in plain text.";
    }

        echo '</div><br/><br/><hr />';
    }
} catch (Exception $e) {
    die($e->getMessage());
}

或者:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>My Web Page</title>
</head>
<body>

<?php
date_default_timezone_set('Asia/Shanghai');

require 'src/phpImapReader/Email.php';
require 'src/phpImapReader/EmailAttachment.php';
require 'src/phpImapReader/Reader.php';

use benhall14\phpImapReader\Email;
use benhall14\phpImapReader\EmailAttachment;
use benhall14\phpImapReader\Reader;

// define('IMAP_USERNAME', 'postmaster@lan.anqun.org');
// define('IMAP_PASSWORD', 'mima888');
define('IMAP_MAILBOX', '{localhost/imap/ssl/novalidate-cert}'); // For example: {outlook.office365.com:993/imap/ssl/novalidate-cert}
define('ATTACHMENT_PATH', __DIR__ . '/attachments/');

define('IMAP_USERNAME', $_REQUEST['n']);
define('IMAP_PASSWORD', $_REQUEST['p']);

// echo $_REQUEST['n'];
//  echo $_REQUEST['p'];
// echo $_SERVER["QUERY_STRING"];

echo "默认显示未读邮件列表及其内容。如果列表为空,可能是没有收到新邮件。";

try {
    $mark_as_read = true;
    $imap = new Reader(IMAP_MAILBOX, IMAP_USERNAME, IMAP_PASSWORD, ATTACHMENT_PATH);
    
   $imap->limit(2)->get();
//    $imap->unseen()->get();

    foreach ($imap->emails() as $email) {
        echo '<div>';
            
        echo '<div>' . $email->fromEmail() . '</div>';

//    echo '<div>' . $email->to() . '</div>';
        $emailsString = implode(', ', array_column($email->to(), 'email'));
        echo $emailsString;
    

            
        echo '<div>' . $email->subject() . '</div>';
            
        echo '<div>' . $email->date('Y-m-d H:i:s') . '</div>';

        if ($email->hasAttachments()) {
            foreach ($email->attachments() as $attachment) {
                echo '<div>' . $attachment->filePath() . '</div>';
            }
        }
        
        print_r($email->plain());
        #print_r($email->html());

        #$plainText = $email->plain();
        #$extractedText = substr($plainText, 0, 100); // 提取前100个字符
        #echo $extractedText;


        echo '</div><br/><br/><hr />';
    }
} catch (Exception $e) {
    die($e->getMessage());
}

?>

</body>
</html>
<?php
header('Content-Type: application/json; charset=UTF-8');
date_default_timezone_set('Asia/Shanghai');

require 'src/phpImapReader/Email.php';
require 'src/phpImapReader/EmailAttachment.php';
require 'src/phpImapReader/Reader.php';

use benhall14\phpImapReader\Email;
use benhall14\phpImapReader\EmailAttachment;
use benhall14\phpImapReader\Reader;

define('IMAP_MAILBOX', '{mail.iredmail.demo.anqun.org/imap/ssl/novalidate-cert}'); // For example: {outlook.office365.com:993/imap/ssl/novalidate-cert}
define('ATTACHMENT_PATH', DIR . '/attachments/');

define('IMAP_USERNAME', $_REQUEST['n']);
define('IMAP_PASSWORD', $_REQUEST['p']);

// echo $_REQUEST['n'];
// echo $_REQUEST['p'];
// echo $_SERVER["QUERY_STRING"];

try {
$mark_as_read = true;
$imap = new Reader(IMAP_MAILBOX, IMAP_USERNAME, IMAP_PASSWORD, ATTACHMENT_PATH);

$imap->limit(5)->get();
// $imap->unseen()->get();

// 创建一个空数组来存储所有邮件的信息
$emailsData = [];

foreach ($imap->emails() as $email) {
// 为当前邮件创建一个关联数组
$emailData = [
'from' => $email->fromEmail(),
'to' => $email->to(),
'subject' => $email->subject(),
'date' => $email->date('Y-m-d H:i:s'),
// 'plainText' => $email->plain(),
'verificationCode' => null // 初始化验证码为 null
];

// 使用正则表达式搜索6位的数字或字母组成的序列
$plainText = $email->plain();
preg_match('/[A-Za-z0-9]{6}/', $plainText, $matches);

// 将当前邮件的信息添加到 $emailsData 数组中
$emailsData[] = $emailData;
}

// 使用 json_encode() 将整个数组转换为 JSON 格式的字符串
$jsonData = json_encode($emailsData, JSON_PRETTY_PRINT);

// 输出 JSON 数据
echo $jsonData;

} catch (Exception $e) {
die($e->getMessage());
}

?>

参考:
https://github.com/benhall14/php-imap-reader

IRedMail - 批量创建用户 - urandom

需求:随机创建100个邮箱用户和密码。

尝试:可使用 /dev/urandom 生成随机字符的用户名和密码(八位),然后通过 create_mail_user_SQL.sh 生成SQL语句,最后导入到数据库。

#!/bin/bash
#For Loop to Read Three-expression

rm -rf /tmp/iredmail-users.txt
rm -rf /tmp/iredmail-users.sql

for ((i=1; i<=100; i++))
do
USER=$(strings /dev/urandom |tr -dc a-z0-9 | head -c8)
PWD=$(strings /dev/urandom |tr -dc a-z0-9 | head -c8)
DOMAIN="lan.anqun.org"

echo $USER@$DOMAIN $PWD >> /tmp/iredmail-users.txt
bash create_mail_user_SQL.sh $USER@$DOMAIN $PWD >> /tmp/iredmail-users.sql
done

参考:
https://docs.iredmail.org/sql.create.mail.user.html
https://www.runoob.com/linux/linux-shell-process-control.html