internal/functions/generators/New-SldgEmail.ps1
|
function New-SldgEmail { <# .SYNOPSIS Generates realistic email addresses using locale-specific domains. #> [CmdletBinding()] param ( [string]$FirstName, [string]$LastName, [string]$Locale, [int]$Count = 1 ) # ASCII transliteration map for common diacritics $diacriticMap = @{ 'á'='a'; 'à'='a'; 'â'='a'; 'ä'='a'; 'ã'='a'; 'å'='a' 'č'='c'; 'ć'='c'; 'ç'='c' 'ď'='d'; 'đ'='d' 'é'='e'; 'è'='e'; 'ê'='e'; 'ë'='e'; 'ě'='e' 'í'='i'; 'ì'='i'; 'î'='i'; 'ï'='i' 'ľ'='l'; 'ĺ'='l'; 'ł'='l' 'ñ'='n'; 'ň'='n'; 'ń'='n' 'ó'='o'; 'ò'='o'; 'ô'='o'; 'ö'='o'; 'õ'='o'; 'ø'='o' 'ř'='r'; 'ŕ'='r' 'š'='s'; 'ś'='s'; 'ş'='s' 'ť'='t'; 'ţ'='t' 'ú'='u'; 'ù'='u'; 'û'='u'; 'ü'='u'; 'ů'='u' 'ý'='y'; 'ÿ'='y' 'ž'='z'; 'ź'='z'; 'ż'='z' 'ß'='ss'; 'æ'='ae'; 'œ'='oe'; 'þ'='th'; 'ð'='d' } $transliterate = { param([string]$Text) $result = $Text.ToLower() foreach ($key in $diacriticMap.Keys) { $result = $result.Replace($key, $diacriticMap[$key]) } # Remove any remaining non-ASCII characters $result -replace '[^a-z0-9._-]', '' } $localeData = Get-SldgLocaleData -Locale $Locale $domains = $localeData.EmailDomains $separators = @('.', '_', '') for ($i = 0; $i -lt $Count; $i++) { $fn = if ($FirstName) { & $transliterate $FirstName } else { & $transliterate (New-SldgPersonName -Type First -Locale $Locale) } $ln = if ($LastName) { & $transliterate $LastName } else { & $transliterate (New-SldgPersonName -Type Last -Locale $Locale) } $domain = $domains | Get-Random $sep = $separators | Get-Random $suffix = if ((Get-Random -Minimum 0 -Maximum 3) -eq 0) { Get-Random -Minimum 1 -Maximum 99 } else { '' } # Varied patterns $pattern = Get-Random -Minimum 0 -Maximum 4 $local = switch ($pattern) { 0 { "$fn$sep$ln$suffix" } 1 { "$($fn[0])$sep$ln$suffix" } 2 { "$fn$sep$($ln[0])$suffix" } 3 { "$ln$sep$fn$suffix" } } "$local@$domain" } } |