Convert Email Address to Duckduckgo Anonymous email format

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

Per 16-03-2025. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==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);
})();