From 533e79ba959143f0459431a486bfb85c56c72ddc Mon Sep 17 00:00:00 2001 From: luisgulo Date: Fri, 24 Oct 2025 18:01:10 +0200 Subject: Releasing code version 1.8.0 --- core/modules/smtp_send.sh | 94 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 core/modules/smtp_send.sh (limited to 'core/modules/smtp_send.sh') diff --git a/core/modules/smtp_send.sh b/core/modules/smtp_send.sh new file mode 100644 index 0000000..6961ec4 --- /dev/null +++ b/core/modules/smtp_send.sh @@ -0,0 +1,94 @@ +#!/bin/bash +# Module: smtp_send +# Description: Envía un correo de prueba usando SMTP con netcat o openssl s_client +# License: GPLv3 +# Author: Luis GuLo +# Version: 0.2.0 +# Dependencies: nc o openssl, base64 + +smtp_send_task() { + declare -A args + for arg in "$@"; do key="${arg%%=*}"; value="${arg#*=}"; args["$key"]="$value"; done + + local smtp_server="${args[smtp_server]}" + local smtp_port="${args[smtp_port]:-587}" + local smtp_user="${args[smtp_user]}" + local smtp_pass="${args[smtp_pass]}" + local from="${args[from]}" + local to="${args[to]}" + local subject="${args[subject]:-Prueba desde ShFlow}" + local body="${args[body]:-Este es un correo de prueba enviado desde el módulo smtp_send.}" + + # 🌐 Cargar traducciones + local lang="${shflow_vars[language]:-es}" + local trfile="$(dirname "${BASH_SOURCE[0]}")/smtp_send.tr.${lang}" + declare -A tr + if [[ -f "$trfile" ]]; then + while IFS='=' read -r k v; do tr["$k"]="$v"; done < "$trfile" + fi + + if [[ -z "$smtp_server" || -z "$smtp_user" || -z "$smtp_pass" || -z "$from" || -z "$to" ]]; then + echo "${tr[missing_args]:-❌ [smtp_send] Faltan argumentos obligatorios: smtp_server, smtp_user, smtp_pass, from, to}" + return 1 + fi + + echo "$(render_msg "${tr[start]}" "to=$to" "server=$smtp_server" "port=$smtp_port")" + + local auth_user auth_pass + auth_user=$(echo -n "$smtp_user" | base64) + auth_pass=$(echo -n "$smtp_pass" | base64) + + local smtp_script + smtp_script=$(cat < +RCPT TO:<$to> +DATA +Subject: $subject +From: $from +To: $to + +$body +. +QUIT +EOF +) + + if command -v nc &>/dev/null; then + echo "${tr[using_nc]:-🔧 Usando netcat para conexión SMTP...}" + echo "$smtp_script" | nc "$smtp_server" "$smtp_port" + elif command -v openssl &>/dev/null; then + echo "${tr[using_openssl]:-🔧 Usando openssl para conexión STARTTLS...}" + echo "$smtp_script" | openssl s_client -starttls smtp -crlf -connect "$smtp_server:$smtp_port" 2>/dev/null + else + echo "${tr[missing_tools]:-❌ [smtp_send] No se encontró ni netcat (nc) ni openssl en el sistema.}" + return 1 + fi + + echo "${tr[done]:-✅ [smtp_send] Comando ejecutado. Verifica si el correo fue recibido.}" +} + +check_dependencies_smtp_send() { + local lang="${shflow_vars[language]:-es}" + local trfile="$(dirname "${BASH_SOURCE[0]}")/smtp_send.tr.${lang}" + declare -A tr + if [[ -f "$trfile" ]]; then + while IFS='=' read -r k v; do tr["$k"]="$v"; done < "$trfile" + fi + + if command -v nc &>/dev/null || command -v openssl &>/dev/null; then + if ! command -v base64 &>/dev/null; then + echo "${tr[missing_base64]:-❌ [smtp_send] Falta base64 en el sistema.}" + return 1 + fi + local tool=$(command -v nc &>/dev/null && echo "nc" || echo "openssl") + echo "$(render_msg "${tr[deps_ok]}" "tool=$tool")" + return 0 + else + echo "${tr[missing_tools]:-❌ [smtp_send] No se encontró ni nc ni openssl.}" + return 1 + fi +} -- cgit v1.2.3