Convert Email Address to Duckduckgo Anonymous email format

Converts an email to duckgo anonymous email format, now with minimize functionality

От 16.03.2025. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Convert Email Address to Duckduckgo Anonymous email format
// @namespace    http://tampermonkey.net/
// @author       aspen138
// @version      1.1.3
// @description  Converts an email to duckgo anonymous email format, now with minimize functionality
// @match https://126.com/*
// @match https://abv.bg/*
// @match https://adelphia.net/*
// @match https://aim.com/*
// @match https://alice.it/*
// @match https://aol.com/*
// @match https://att.net/*
// @match https://bellsouth.net/*
// @match https://bigpond.com/*
// @match https://bluewin.ch/*
// @match https://blueyonder.co.uk/*
// @match https://bol.com.br/*
// @match https://btinternet.com/*
// @match https://charter.net/*
// @match https://comcast.net/*
// @match https://cox.net/*
// @match https://cs.com/*
// @match https://earthlink.net/*
// @match https://email.mail.com/*
// @match https://embarqmail.com/*
// @match https://excite.com/*
// @match https://exmail.qq.com/*
// @match https://work.weixin.qq.com/mail/
// @match https://fastmail.com/*
// @match https://free.fr/*
// @match https://frontiernet.net/*
// @match https://ge.com/*
// @match https://gmail.com/*
// @match https://gmx.com/*
// @match https://hetnet.nl/*
// @match https://home.nl/*
// @match https://hp.com/*
// @match https://icloud.com/mail/*
// @match https://ig.com.br/*
// @match https://insightbb.co/*
// @match https://juno.com/*
// @match https://laposte.net/*
// @match https://libero.it/*
// @match https://mac.com/*
// @match https://mail.126.com/*
// @match https://mail.163.com/*
// @match https://mail.apple.com/*
// @match https://mail.aol.com/*
// @match https://mail.fastmail.com/*
// @match https://mail.gmx.com/*
// @match https://mail.google.com/*
// @match https://mail.proton.me/*
// @match https://mail.qq.com/*
// @match https://mail.ru/*
// @match https://mail.sina.com/*
// @match https://mail.sina.com.cn/*
// @match https://mail.yahoo.com/*
// @match https://mail.yandex.com/*
// @match https://mail.zoho.com/*
// @match https://mchsi.com/*
// @match https://me.com/*
// @match https://mindspring.com/*
// @match https://msn.com/*
// @match https://netscape.net/*
// @match https://netzero.com/*
// @match https://netzero.net/*
// @match https://ntlworld.com/*
// @match https://optonline.net/*
// @match https://optusnet.com.au/*
// @match https://orange.fr/*
// @match https://outlook.com/*
// @match https://outlook.live.com/*
// @match https://pacbell.net/*
// @match https://peoplepc.com/*
// @match https://planet.nl/*
// @match https://prodigy.net/*
// @match https://proton.me/*
// @match https://rediffmail.com/*
// @match https://roadrunner.com/*
// @match https://rogers.com/*
// @match https://sbcglobal.net/*
// @match https://shaw.ca/*
// @match https://sky.com/*
// @match https://skynet.be/*
// @match https://sympatico.ca/*
// @match https://t-online.de/*
// @match https://talktalk.net/*
// @match https://telenet.be/*
// @match https://telus.net/*
// @match https://terra.com.br/*
// @match https://tiscali.co.uk/*
// @match https://tiscali.it/*
// @match https://trainingelite.com/*
// @match https://uol.com.br/*
// @match https://us.army.mil/*
// @match https://verizon.net/*
// @match https://videotron.ca/*
// @match https://virgilio.it/*
// @match https://wanadoo.fr/*
// @match https://web.de/*
// @match https://webtv.net/*
// @match https://windstream.net/*
// @match https://wp.pl/*
// @match https://www.mail.com/*
// @match https://xtra.co.nz/*
// @match https://yahoo.ca/*
// @match https://yahoo.co.id/*
// @match https://yahoo.co.in/*
// @match https://yahoo.co.uk/*
// @match https://yahoo.com/*
// @match https://yahoo.com.ar/*
// @match https://yahoo.com.au/*
// @match https://yahoo.com.br/*
// @match https://yahoo.com.cn/*
// @match https://yahoo.com.mx/*
// @match https://yahoo.com.sg/*
// @match https://yahoo.com/mail/*
// @match https://yahoo.de/*
// @match https://yahoo.es/*
// @match https://yahoo.fr/*
// @match https://yahoo.in/*
// @match https://yahoo.it/*
// @match https://ymail.com/*
// @match https://yandex.com/mail/*
// @match https://yandex.ru/*
// @match https://zoho.com/mail/*
// @icon         data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cGF0aCBmaWxsPSIjZGU1ODMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02NCAxMjhjMzUuMzQ2IDAgNjQtMjguNjU0IDY0LTY0IDAtMzUuMzQ2LTI4LjY1NC02NC02NC02NFMwIDI4LjY1NCAwIDY0YzAgMzUuMzQ2IDI4LjY1NCA2NCA2NCA2NHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogIDxwYXRoIGZpbGw9IiNkZGQiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTczIDExMS43NWMwLS41LjEyMy0uNjE0LTEuNDY3LTMuNzgyLTQuMjI0LTguNDU5LTguNDY5LTIwLjM4NC02LjUzOC0yOC4wNzUuMzUyLTEuMzk3LTMuOTc5LTUxLjc0NC03LjA0LTUzLjM2NS0zLjQwMy0xLjgxMy03LjU5LTQuNjktMTEuNDE5LTUuMzMtMS45NDMtLjMxLTQuNDktLjE2NC02LjQ4Mi4xMDUtLjM1NC4wNDctLjM2OC42ODQtLjAzLjc5OCAxLjMwNy40NDMgMi44OTUgMS4yMTIgMy44MyAyLjM3NS4xNzguMjItLjA2LjU2Ni0uMzQyLjU3Ny0uODgyLjAzMi0yLjQ4Mi40MDItNC41OTMgMi4xOTUtLjI0NC4yMDctLjA0Mi41OTIuMjczLjUzIDQuNTM2LS44OTcgOS4xNy0uNDU1IDExLjkgMi4wMjcuMTc3LjE2LjA4NC40NS0uMTQ3LjUxMi0yMy42OTQgNi40NC0xOS4wMDQgMjcuMDUtMTIuNjk2IDUyLjM0NCA1LjYxOSAyMi41MyA3LjczMyAyOS43OTIgOC40IDMyLjAwNGEuNzE4LjcxOCAwIDAgMCAuNDIzLjQ2N0M1NS4yMjggMTE4LjM4IDczIDExOC41MjQgNzMgMTEzeiIgY2xpcC1ydWxlPSJldmVub2RkIi8+CiAgPHBhdGggZmlsbD0iI2ZmZiIgZD0iTTc2LjI1IDExNi41Yy0yLjg3NSAxLjEyNS04LjUgMS42MjUtMTEuNzUgMS42MjUtNC43NjUgMC0xMS42MjUtLjc1LTE0LjEyNS0xLjg3NS0xLjU0NC00Ljc1MS02LjE2NS0xOS40OC0xMC43MjgtMzguMTg1bC0uNDQ3LTEuODI3LS4wMDMtLjAxNWMtNS40MjUtMjIuMTU2LTkuODU1LTQwLjI1MyAxNC40MjctNDUuOTM4LjIyMi0uMDUyLjMzLS4zMTcuMTgzLS40OTItMi43ODYtMy4zMDUtOC4wMDUtNC4zODgtMTQuNjA0LTIuMTExLS4yNy4wOTMtLjUwNi0uMTgtLjMzOC0uNDEyIDEuMjk0LTEuNzgzIDMuODIzLTMuMTU1IDUuMDcyLTMuNzU2LjI1OC0uMTI0LjI0Mi0uNTAyLS4wMzEtLjU4OGEyNy44NzkgMjcuODc5IDAgMCAwLTMuNzcxLS45Yy0uMzctLjA1OS0uNDA0LS42OTMtLjAzMi0uNzQzIDkuMzU2LTEuMjU5IDE5LjEyNSAxLjU1IDI0LjAyOCA3LjcyNmEuMzI2LjMyNiAwIDAgMCAuMTg1LjExNGMxNy45NTMgMy44NTYgMTkuMjM5IDMyLjIzNSAxNy4xNyAzMy41MjgtLjQwNy4yNTUtMS43MTQuMTA4LTMuNDM4LS4wODQtNi45ODUtLjc4Mi0yMC44MTgtMi4zMy05LjQwMSAxOC45NDcuMTEzLjIxLS4wMzcuNDg4LS4yNzIuNTI1LTYuNDM4IDEgMS44MTIgMjEuMTczIDcuODc1IDM0LjQ2MXoiLz4KICA8cGF0aCBmaWxsPSIjM2NhODJiIiBkPSJNODQuMjggOTAuNjk4Yy0xLjM2Ny0uNjMzLTYuNjIyIDMuMTM1LTEwLjExIDYuMDI4LS43MjgtMS4wMzEtMi4xMDMtMS43OC01LjIwMy0xLjI0Mi0yLjcxMy40NzItNC4yMTEgMS4xMjYtNC44OCAyLjI1NC00LjI4My0xLjYyMy0xMS40ODgtNC4xMy0xMy4yMjktMS43MS0xLjkwMiAyLjY0Ni40NzYgMTUuMTYxIDMuMDAzIDE2Ljc4NiAxLjMyLjg0OSA3LjYzLTMuMjA4IDEwLjkyNi02LjAwNS41MzIuNzQ5IDEuMzg4IDEuMTc4IDMuMTQ4IDEuMTM3IDIuNjYyLS4wNjIgNi45NzktLjY4MSA3LjY0OS0xLjkyMS4wNC0uMDc1LjA3NS0uMTY0LjEwNS0uMjY2IDMuMzg4IDEuMjY2IDkuMzUgMi42MDYgMTAuNjgxIDIuNDA2IDMuNDcxLS41MjEtLjQ4My0xNi43MjMtMi4wOS0xNy40Njd6Ii8+CiAgPHBhdGggZmlsbD0iIzRjYmEzYyIgZD0iTTc0LjQ5IDk3LjA5N2MuMTQ0LjI1Ni4yNi41MjYuMzU4LjguNDgzIDEuMzUyIDEuMjcgNS42NDguNjc0IDYuNzA5LS41OTUgMS4wNjItNC40NTkgMS41NzQtNi44NDMgMS42MTVzLTIuOTItLjgzMS0zLjQwMy0yLjE4MWMtLjM4Ny0xLjA4MS0uNTc3LTMuNjIxLS41NzItNS4wNzUtLjA5OC0yLjE1OC42OS0yLjkxNiA0LjMzNC0zLjUwNiAyLjY5Ni0uNDM2IDQuMTIyLjA3MSA0Ljk0NC45NCAzLjgyOC0yLjg1NyAxMC4yMTUtNi44ODkgMTAuODM4LTYuMTUyIDMuMTA2IDMuNjc0IDMuNDk5IDEyLjQyIDIuODI2IDE1LjkzOS0uMjIgMS4xNTEtMTAuNTA1LTEuMTM5LTEwLjUwNS0yLjM4IDAtNS4xNTItMS4zMzctNi41NjUtMi42NS02Ljcxem0tMjIuNTMtMS42MDljLjg0My0xLjMzMyA3LjY3NC4zMjQgMTEuNDI0IDEuOTkzIDAgMC0uNzcgMy40OTEuNDU2IDcuNjA0LjM1OSAxLjIwMy04LjYyNyA2LjU1OC05LjggNS42MzctMS4zNTUtMS4wNjUtMy44NS0xMi40MzItMi4wOC0xNS4yMzR6Ii8+CiAgPHBhdGggZmlsbD0iI2ZjMyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNTUuMjY5IDY4LjQwN2MuNTUzLTIuNDA0IDMuMTI3LTYuOTMyIDEyLjMyMS02LjgyMiA0LjY0OC0uMDIgMTAuNDIyLS4wMDMgMTQuMjUtLjQzN2E1MS4zMTIgNTEuMzEyIDAgMCAwIDEyLjcyNi0zLjA5NWMzLjk4LTEuNTE5IDUuMzkyLTEuMTggNS44ODctLjI3MS41NDQuOTk4LS4wOTcgMi43MjEtMS40ODggNC4zMDgtMi42NTYgMy4wMzEtNy40MzEgNS4zOC0xNS44NjUgNi4wNzctOC40MzMuNjk3LTE0LjAyLTEuNTY2LTE2LjQyNSAyLjExOC0xLjAzOCAxLjU4OC0uMjM2IDUuMzMyIDcuOTIgNi41MTEgMTEuMDIgMS41OSAyMC4wNzItMS45MTcgMjEuMTkuMjAxcy01LjMyMyA2LjQyOC0xNi4zNjIgNi41MThjLTExLjAzOS4wOS0xNy45MzQtMy44NjUtMjAuMzc5LTUuODMtMy4xMDItMi40OTUtNC40OS02LjEzMy0zLjc3NS05LjI3OHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogIDxnIGZpbGw9IiMxNDMwN2UiIG9wYWNpdHk9Ii44Ij4KICAgIDxwYXRoIGQ9Ik02OS4zMjcgNDIuMTI3Yy42MTYtMS4wMDggMS45ODEtMS43ODYgNC4yMTYtMS43ODYgMi4yMzQgMCAzLjI4NS44ODkgNC4wMTMgMS44OC4xNDguMjAyLS4wNzYuNDQtLjMwNi4zNGE1OS44NjkgNTkuODY5IDAgMCAxLS4xNjgtLjA3M2MtLjgxNy0uMzU3LTEuODItLjc5NS0zLjU0LS44Mi0xLjgzOC0uMDI2LTIuOTk3LjQzNS0zLjcyNy44MzEtLjI0Ni4xMzQtLjYzNC0uMTMzLS40ODgtLjM3MnptLTI1LjE1NyAxLjI5YzIuMTctLjkwNyAzLjg3Ni0uNzkgNS4wODEtLjUwNC4yNTQuMDYuNDMtLjIxMy4yMjgtLjM3Ny0uOTM2LS43NTUtMy4wMy0xLjY5Mi01Ljc2MS0uNjc0LTIuNDM3LjkwOS0zLjU4NSAyLjc5Ni0zLjU5MiA0LjAzOC0uMDAyLjI5Mi42LjMxNy43NTYuMDcuNDItLjY3IDEuMTItMS42NDYgMy4yODktMi41NTN6Ii8+CiAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03NS40NCA1NS45MmEzLjQ3IDMuNDcgMCAwIDEtMy40NzMtMy40NjIgMy40NyAzLjQ3IDAgMCAxIDMuNDczLTMuNDYgMy40NyAzLjQ3IDAgMCAxIDMuNDc1IDMuNDYgMy40NyAzLjQ3IDAgMCAxLTMuNDc0IDMuNDYyem0yLjQ0Ny00LjYwOGEuODk5Ljg5OSAwIDAgMC0xLjc5OSAwYzAgLjQ5NC40MDUuODk1LjkuODk1LjQ5OSAwIC45LS40LjktLjg5NXptLTI1LjQ2NCAzLjU0MmE0LjA0MiA0LjA0MiAwIDAgMS00LjA0OSA0LjAzNyA0LjA0NSA0LjA0NSAwIDAgMS00LjA1LTQuMDM3IDQuMDQ1IDQuMDQ1IDAgMCAxIDQuMDUtNC4wMzcgNC4wNDUgNC4wNDUgMCAwIDEgNC4wNSA0LjAzN3ptLTEuMTkzLTEuMzM4YTEuMDUgMS4wNSAwIDAgMC0yLjA5NyAwIDEuMDQ3IDEuMDQ3IDAgMCAwIDIuMDk3IDB6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICA8L2c+CiAgPHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNjQgMTE3Ljc1YzI5LjY4NSAwIDUzLjc1LTI0LjA2NSA1My43NS01My43NVM5My42ODUgMTAuMjUgNjQgMTAuMjUgMTAuMjUgMzQuMzE1IDEwLjI1IDY0IDM0LjMxNSAxMTcuNzUgNjQgMTE3Ljc1em0wIDVjMzIuNDQ3IDAgNTguNzUtMjYuMzAzIDU4Ljc1LTU4Ljc1Uzk2LjQ0NyA1LjI1IDY0IDUuMjUgNS4yNSAzMS41NTMgNS4yNSA2NCAzMS41NTMgMTIyLjc1IDY0IDEyMi43NXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgo8L3N2Zz4K
// @iconbackup   https://ssl.gstatic.com/ui/v1/icons/mail/rfr/gmail.ico
// @license      MIT
// @grant        GM_getValue
// @grant        GM_setValue
// ==/UserScript==


(function() {
    'use strict';
    // Create a container for the floating box
    const container = document.createElement('div');
    container.id = 'emailConverter_container';
    container.style.position = 'fixed';
    container.style.bottom = '20px';
    container.style.left = '20px';
    container.style.zIndex = '9999';
    container.style.padding = '10px';
    container.style.backgroundColor = '#fff';
    container.style.border = '1px solid #ccc';
    container.style.borderRadius = '5px';
    container.style.boxShadow = '0 0 5px rgba(0,0,0,0.3)';
    container.style.fontFamily = 'Arial, sans-serif';
    container.style.maxWidth = '280px';

    // Title or heading
    const heading = document.createElement('h4');
    heading.id = 'emailConverter_heading';
    heading.textContent = 'Email Converter';
    heading.style.margin = '0 0 10px 0';
    container.appendChild(heading);

    // Close (minimize) button
    const minimizeButton = document.createElement('button');
    minimizeButton.id = 'emailConverter_minimizeBtn';
    minimizeButton.textContent = 'X';
    minimizeButton.style.position = 'absolute';
    minimizeButton.style.top = '5px';
    minimizeButton.style.right = '10px';
    minimizeButton.style.cursor = 'pointer';
    minimizeButton.style.border = 'none';
    minimizeButton.style.background = 'none';
    minimizeButton.style.fontSize = '16px';
    container.appendChild(minimizeButton);

    // This button will appear when the container is minimized
    const restoreButton = document.createElement('button');
    restoreButton.id = 'emailConverter_restoreBtn';
    restoreButton.textContent = 'Email Converter';
    restoreButton.style.position = 'fixed';
    restoreButton.style.left = '0';
    restoreButton.style.bottom = '20px';
    restoreButton.style.zIndex = '9999';
    restoreButton.style.padding = '6px 12px';
    restoreButton.style.cursor = 'pointer';
    restoreButton.style.border = '1px solid #ccc';
    restoreButton.style.borderRadius = '5px';
    restoreButton.style.fontFamily = 'Arial, sans-serif';
    restoreButton.style.backgroundColor = '#fff';
    restoreButton.style.boxShadow = '0 0 5px rgba(0,0,0,0.3)';
    container.style.display = 'none';
    restoreButton.style.display = 'block';
    document.body.appendChild(restoreButton);

    // Event listeners for minimize/restore
    minimizeButton.addEventListener('click', () => {
        container.style.display = 'none';
        restoreButton.style.display = 'block';
    });

    restoreButton.addEventListener('click', () => {
        container.style.display = 'block';
        restoreButton.style.display = 'none';
    });

    // Wrapper to neatly organize form elements
    const formWrapper = document.createElement('div');
    formWrapper.id = 'emailConverter_formWrapper';
    formWrapper.style.display = 'flex';
    formWrapper.style.flexDirection = 'column';
    formWrapper.style.gap = '5px';

    // Retrieve stored values (if any)
    const storedSendTo = GM_getValue('converterSendTo', '');
    const storedDdgo = GM_getValue('converterDdgo', '');

    // Label and input for "send email to who?"
    const labelSendTo = document.createElement('label');
    labelSendTo.id = 'emailConverter_labelSendTo';
    labelSendTo.textContent = 'Send email to who: ';
    labelSendTo.style.marginRight = '10px';

    const inputSendTo = document.createElement('input');
    inputSendTo.id = 'emailConverter_inputSendTo';
    inputSendTo.type = 'text';
    inputSendTo.placeholder = 'e.g. [email protected]';
    inputSendTo.style.width = '250px';
    inputSendTo.value = storedSendTo;

    const rowSendTo = document.createElement('div');
    rowSendTo.id = 'emailConverter_rowSendTo';
    rowSendTo.appendChild(labelSendTo);
    rowSendTo.appendChild(inputSendTo);

    // Label and input for "your ddgo mail?"
    const labelDdgo = document.createElement('label');
    labelDdgo.id = 'emailConverter_labelDdgo';
    labelDdgo.textContent = 'Your DuckduckGo address: ';
    labelDdgo.style.marginRight = '10px';

    const inputDdgo = document.createElement('input');
    inputDdgo.id = 'emailConverter_inputDdgo';
    inputDdgo.type = 'text';
    inputDdgo.placeholder = 'e.g. [email protected]';
    inputDdgo.style.width = '250px';
    inputDdgo.value = storedDdgo;

    const rowDdgo = document.createElement('div');
    rowDdgo.id = 'emailConverter_rowDdgo';
    rowDdgo.appendChild(labelDdgo);
    rowDdgo.appendChild(inputDdgo);

    // Convert button
    const buttonConvert = document.createElement('button');
    buttonConvert.id = 'emailConverter_convertBtn';
    buttonConvert.textContent = 'Convert';
    buttonConvert.style.marginRight = '10px';
    buttonConvert.style.cursor = 'pointer';
    buttonConvert.style.width = '258px';

    // Output field for converted email
    const labelOutput = document.createElement('label');
    labelOutput.id = 'emailConverter_labelOutput';
    labelOutput.textContent = 'Converted: ';
    labelOutput.style.marginRight = '10px';

    const outputEmail = document.createElement('input');
    outputEmail.id = 'emailConverter_outputEmail';
    outputEmail.type = 'text';
    outputEmail.readOnly = true;
    outputEmail.style.width = '250px';

    const rowOutput = document.createElement('div');
    rowOutput.id = 'emailConverter_rowOutput';
    rowOutput.appendChild(labelOutput);
    rowOutput.appendChild(outputEmail);

    // Feedback or error message area
    const feedback = document.createElement('p');
    feedback.id = 'emailConverter_feedback';
    feedback.style.color = 'red';
    feedback.style.fontSize = '14px';
    feedback.style.margin = '5px 0 0 0';
    feedback.style.minHeight = '18px';
    feedback.textContent = '';

    // Conversion function
    buttonConvert.addEventListener('click', () => {
        const originalEmail = inputSendTo.value.trim();
        const ddgoEmail = inputDdgo.value.trim();
        let errorMessage = '';

        if (!originalEmail) {
            errorMessage = 'Please enter an email address to convert.';
        } else if (!ddgoEmail) {
            errorMessage = 'Please enter your DDG address.';
        }

        if (errorMessage) {
            feedback.textContent = errorMessage;
            outputEmail.value = '';
            return;
        }

        const converted = originalEmail.replace(/@/g, '_at_') + '_' + ddgoEmail;
        outputEmail.value = converted;
        feedback.textContent = '';

        GM_setValue('converterSendTo', originalEmail);
        GM_setValue('converterDdgo', ddgoEmail);
    });

    // Assemble elements in the container
    formWrapper.appendChild(rowSendTo);
    formWrapper.appendChild(rowDdgo);
    formWrapper.appendChild(buttonConvert);
    formWrapper.appendChild(rowOutput);
    formWrapper.appendChild(feedback);

    container.appendChild(formWrapper);
    document.body.appendChild(container);
})();