Greasy Fork is available in English.

EmailEnhance

send email enhance

Version au 30/10/2025. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name:zh-CN      Steam发送邮件工具
// @name            EmailEnhance
// @namespace       https://blog.chrxw.com
// @supportURL      https://blog.chrxw.com/scripts.html
// @contributionURL https://afdian.com/@chr233
// @version         1.1
// @description:zh-CN  增强发送邮件
// @description     send email enhance
// @author          Chr_
// @match           https://store.steampowered.com/*
// @license         AGPL-3.0
// @icon            https://blog.chrxw.com/favicon.ico
// @grant           GM_addStyle
// @grant           GM_setClipboard
// @grant           GM_setValue
// @grant           GM_getValue
// @grant           GM_registerMenuCommand
// ==/UserScript==


(async () => {
    "use strict";

    let mailSubject = GM_getValue("mailSubject") || "Steam curator";
    let mailContent = GM_getValue("mailContent") || "Hello, we are from the Steam curator xxxxx, here is our ... {游戏链接} {游戏名称}";

    {
        GM_registerMenuCommand("设置邮件主题", setMailSubject);
        GM_registerMenuCommand("设置邮件正文", setMailContent);

        setInterval(() => {
            const eleAs = document.querySelectorAll("a[href^='mailto']");
            if (eleAs) {
                eleAs.forEach(eleA => {
                    const mailTo = eleA.getAttribute("href")
                    eleA.textContent = "发送邮件";
                    eleA.setAttribute("href", "");
                    eleA.addEventListener("click", (e) => {
                        e.preventDefault()
                        enhanceMailTo(mailTo)
                    });
                });
            }
        }, 1000);
    }

    function setMailSubject() {
        showDialog("设置邮件主题", "支持变量:{游戏链接} {游戏名称}", mailSubject, 5000, (text) => {
            mailSubject = text;
            GM_setValue("mailSubject", text);
        });
    }

    function setMailContent() {
        showDialog("设置邮件正文", "支持变量:{游戏链接} {游戏名称}", mailContent, 5000, (text) => {
            mailContent = text;
            GM_setValue("mailContent", text);
        });
    }

    function showDialog(title, subTitle, defaultValue, length, onSuccess) {
        ShowPromptWithTextAreaDialog(title, defaultValue, "确认", "取消", length, subTitle).done((text) => onSuccess(text))
    }

    function enhanceMailTo(mailTo) {
        console.log(mailTo);

        const mail = (mailTo.match(/mailto:((?:.+)@(?:[^?\s]+))/) ?? [null, null])[1];
        if (!mail) {
            return;
        }

        const appName = document.querySelector("#application_config").getAttribute("data-appname").replace(/\\u([\dA-Fa-f]{4})/g, function (match, grp) {
            return String.fromCharCode(parseInt(grp, 16));
        });
        const encodeSubject = mailSubject.replace("{游戏链接}", location.href).replace("{游戏名称}", appName);
        const encodeContent = mailContent.replace("{游戏链接}", location.href).replace("{游戏名称}", appName);

        ShowConfirmDialog("发送邮件选项", `发送邮件到 ${mail}`, "发送邮件", "复制邮箱正文", "复制邮件标题").done((status) => {
            if (status === "OK") {
                window.open(`mailto:${mail}?subject=${encodeSubject}&body=${encodeContent}`);
            } else {
                GM_setClipboard(encodeSubject, "text");
            }
        }).fail((status) => {
            if (status) {
                GM_setClipboard(encodeContent, "text");
            }
        })
    }

})();