You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Indy组件含带ñ的国际化域名时邮件发送报错问题

含ñ字符的收件人域名导致Indy SMTP发送报错问题

当邮件收件人域名包含ñ这类非ASCII特殊字符时,执行以下代码添加收件人:

IdMessage.Recipients.Add.Text := 'algo@domainwithñ.com';

调用SMTP发送方法时会触发异常:

IdSMTP.Send(IdMessage);

错误提示:

Project EnvioEmail.exe raised exception class EIdSMTPReplyError with message 'Parameter unrecognized'.

问题原因

SMTP协议本身不直接支持包含非ASCII字符的国际化域名(IDN),必须将这类域名转换为Punycode编码格式才能被SMTP服务器识别。

解决方案

利用Indy自带的IdIdn单元将域名部分转换为Punycode,示例代码如下:

uses IdIdn;

var
  EmailParts: TStringList;
  LocalPart, Domain: string;
begin
  EmailParts := TStringList.Create;
  try
    EmailParts.Delimiter := '@';
    EmailParts.StrictDelimiter := True;
    EmailParts.DelimitedText := 'algo@domainwithñ.com';
    LocalPart := EmailParts[0];
    // 将含特殊字符的域名转换为Punycode
    Domain := ToPunycode(EmailParts[1]);
    // 组装转换后的完整邮箱地址
    IdMessage.Recipients.Add.Text := LocalPart + '@' + Domain;
    IdSMTP.Send(IdMessage);
  finally
    EmailParts.Free;
  end;
end;

说明

  • 转换后的Punycode域名以xn--开头,例如domainwithñ.com会被转换为xn--domainwith-nza.com,SMTP服务器可正常识别该格式。
  • 收件人收到邮件时,邮箱客户端会自动将Punycode转换回原始的可读域名,不影响收件体验。
  • 确保使用的Indy版本包含IdIdn单元,旧版Indy可能需要自行实现IDN转换逻辑。

内容的提问来源于stack exchange,提问作者ruben lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:42:34