Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于发送电子邮件的波兰语字符MIME格式的问题_C#_Sockets_Email - Fatal编程技术网

C# 用于发送电子邮件的波兰语字符MIME格式的问题

C# 用于发送电子邮件的波兰语字符MIME格式的问题,c#,sockets,email,C#,Sockets,Email,我正在尝试使用传递方法SmtpDeliveryMethod.Network发送邮件(邮件正文包含波兰语字符)。我使用MIME格式、套接字、IPHostEntry和IPEndPoint。我的标题如下所示: Header.Append("MIME-Version: 1.0\r\n"); Header.Append("Content-type: text/plain; charset=ISO-8859-2;\r\n"); Header.Append("Content-transfer-encoding

我正在尝试使用传递方法SmtpDeliveryMethod.Network发送邮件(邮件正文包含波兰语字符)。我使用MIME格式、套接字、IPHostEntry和IPEndPoint。我的标题如下所示:

Header.Append("MIME-Version: 1.0\r\n");
Header.Append("Content-type: text/plain; charset=ISO-8859-2;\r\n");
Header.Append("Content-transfer-encoding: quoted-printable\r\n");
当我试图发送邮件时,我仍然得到问号,而不是我键入的字符。有人能帮我吗?我包括我的全班同学

    using System;
using System.Net;
using System.Net.Mail;
using System.Net.Sockets;
using System.Text;
public class SmtpDirect
{
    /// <summary>
    /// Get / Set the name of the SMTP mail server
    /// </summary>
    public static string SmtpServer = "kappa.it.com.ru";
    private enum SMTPResponse : int
    {
        CONNECT_SUCCESS = 220,
        GENERIC_SUCCESS = 250,
        DATA_SUCCESS = 354,
        QUIT_SUCCESS = 221
    }

    public static bool Send(MailMessage message)
    {
        IPHostEntry IPhst = Dns.GetHostEntry(SmtpServer);
        IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25);
        Socket s = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
        s.Connect(endPt);

        if (!Check_Response(s, SMTPResponse.CONNECT_SUCCESS))
        {
            s.Close();
            return false;
        }

        Senddata(s, string.Format("HELO {0}\r\n", Dns.GetHostName()));
        if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
        {
            s.Close();
            return false;
        }

        Senddata(s, string.Format("MAIL From: {0}\r\n", message.From));
        if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
        {

            s.Close();
            return false;
        }

        string _To = message.To.ToString();
        string[] Tos = _To.Split(new char[] { ';' });
        foreach (string To in Tos)
        {
            Senddata(s, string.Format("RCPT TO: {0}\r\n", To));
            if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
            {
                s.Close();
                return false;
            }
        }

        StringBuilder Header = new StringBuilder();

        Header.Append("From: " + message.From + "\r\n");
        Tos = message.To.ToString().Split(new char[] { ';' });
        Header.Append("To: ");
        for (int i = 0; i < Tos.Length; i++)
        {
            Header.Append(i > 0 ? "," : "");
            Header.Append(Tos[i]);
        }
        Header.Append("\r\n");
        if (message.CC != null)
        {
            Tos = message.CC.ToString().Split(new char[] { ';' });
            Header.Append("CC: ");
            for (int i = 0; i < Tos.Length; i++)
            {
                Header.Append(i > 0 ? "," : "");
                Header.Append(Tos[i]);
            }
            Header.Append("\r\n");
        }
        Header.Append("Date: ");
        Header.Append(DateTime.Now.ToString("ddd, d M y H:m:s z"));
        Header.Append("\r\n");
        Header.Append("Subject: " + message.Subject + "\r\n");
        Header.Append("X-Mailer: SMTPDirect v1\r\n");
        string MsgBody = message.Body;
        if (!MsgBody.EndsWith("\r\n"))
            MsgBody += "\r\n";
        Header.Append("MIME-Version: 1.0\r\n");
        Header.Append("Content-type: text/plain; charset=ISO-8859-2;\r\n");
        Header.Append("Content-transfer-encoding: quoted-printable\r\n");
        Header.Append("\r\n");
        Header.Append("This is a multi-part message in MIME format.\r\n");
        StringBuilder sb = new StringBuilder();
        sb.Append("--unique-boundary-1\r\n");
        sb.Append("Content-type: text/plain; charset=ISO-8859-2\r\n");
        sb.Append("Content-transfer-encoding: quoted-printable\r\n");
        sb.Append("\r\n");
        sb.Append(MsgBody + "\r\n");
        sb.Append("\r\n");

        MsgBody = sb.ToString();

        Senddata(s, ("DATA\r\n"));
        if (!Check_Response(s, SMTPResponse.DATA_SUCCESS))
        {
            s.Close();
            return false;
        }
        Header.Append("\r\n");
        Header.Append(MsgBody);
        Header.Append(".\r\n");
        Header.Append("\r\n");
        Header.Append("\r\n");
        Senddata(s, Header.ToString());
        if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS))
        {
            s.Close();
            return false;
        }

        Senddata(s, "QUIT\r\n");
        Check_Response(s, SMTPResponse.QUIT_SUCCESS);
        s.Close();
        return true;
    }
    private static void Senddata(Socket s, string msg)
    {
        byte[] _msg = Encoding.ASCII.GetBytes(msg);
        s.Send(_msg, 0, _msg.Length, SocketFlags.None);
    }
    private static bool Check_Response(Socket s, SMTPResponse response_expected)
    {
        string sResponse;
        int response;
        byte[] bytes = new byte[1024];
        while (s.Available == 0)
        {
            System.Threading.Thread.Sleep(100);
        }

        s.Receive(bytes, 0, s.Available, SocketFlags.None);
        sResponse = Encoding.ASCII.GetString(bytes);
        response = Convert.ToInt32(sResponse.Substring(0, 3));
        if (response != (int)response_expected)
            return false;
        return true;
    }
}
使用系统;
Net系统;
使用System.Net.Mail;
使用System.Net.Sockets;
使用系统文本;
公共类SmtpDirect
{
/// 
///获取/设置SMTP邮件服务器的名称
/// 
公共静态字符串SmtpServer=“kappa.it.com.ru”;
私有枚举SMTPResponse:int
{
连接成功=220,
通用_成功=250,
数据_SUCCESS=354,
退出成功=221
}
公共静态bool发送(MailMessage)
{
IPHostEntry iphost=Dns.GetHostEntry(SmtpServer);
IPEndPoint endPt=新的IPEndPoint(IPHost.AddressList[0],25);
套接字s=新套接字(endPt.AddressFamily,SocketType.Stream,ProtocolType.Tcp);
s、 连接(endPt);
如果(!检查_响应(s,SMTPResponse.CONNECT_SUCCESS))
{
s、 Close();
返回false;
}
Senddata(s,string.Format(“HELO{0}\r\n”,Dns.GetHostName());
如果(!检查_响应(s,SMTPResponse.GENERIC_SUCCESS))
{
s、 Close();
返回false;
}
Senddata(s,string.Format(“邮件发件人:{0}\r\n”,message.From));
如果(!检查_响应(s,SMTPResponse.GENERIC_SUCCESS))
{
s、 Close();
返回false;
}
字符串_To=message.To.ToString();
字符串[]Tos=_To.Split(新字符[]{';'});
foreach(Tos中的字符串)
{
Senddata(s,string.Format(“RCPT TO:{0}\r\n”,TO));
如果(!检查_响应(s,SMTPResponse.GENERIC_SUCCESS))
{
s、 Close();
返回false;
}
}
StringBuilder标头=新的StringBuilder();
Header.Append(“发件人:“+message.From+”\r\n”);
Tos=message.To.ToString().Split(新字符[]{';'});
标题。附加(“到:”);
for(int i=0;i0?,“:”);
标题.附加(Tos[i]);
}
Header.Append(“\r\n”);
如果(message.CC!=null)
{
Tos=message.CC.ToString().Split(新字符[]{';'});
标题。附加(“CC:”);
for(int i=0;i0?,“:”);
标题.附加(Tos[i]);
}
Header.Append(“\r\n”);
}
标题。附加(“日期:”);
Append(DateTime.Now.ToString(“ddd,dmy-H:M:sz”);
Header.Append(“\r\n”);
Header.Append(“主题:“+message.Subject+”\r\n”);
Header.Append(“X-Mailer:SMTPDirect v1\r\n”);
字符串MsgBody=message.Body;
如果(!MsgBody.EndsWith(“\r\n”))
MsgBody+=“\r\n”;
Header.Append(“MIME版本:1.0\r\n”);
Header.Append(“内容类型:text/plain;charset=ISO-8859-2;\r\n”);
Header.Append(“内容传输编码:带引号的可打印\r\n”);
Header.Append(“\r\n”);
Header.Append(“这是MIME格式的多部分消息。\r\n”);
StringBuilder sb=新的StringBuilder();
sb.追加(“--unique-boundary-1\r\n”);
sb.Append(“内容类型:text/plain;charset=ISO-8859-2\r\n”);
sb.Append(“内容传输编码:引用可打印\r\n”);
sb.追加(“\r\n”);
sb.追加(MsgBody+“\r\n”);
sb.追加(“\r\n”);
MsgBody=sb.ToString();
发送数据(“数据”);
如果(!Check_Response(s,SMTPResponse.DATA_SUCCESS))
{
s、 Close();
返回false;
}
Header.Append(“\r\n”);
Header.Append(MsgBody);
Header.Append(“.\r\n”);
Header.Append(“\r\n”);
Header.Append(“\r\n”);
Senddata(s,Header.ToString());
如果(!检查_响应(s,SMTPResponse.GENERIC_SUCCESS))
{
s、 Close();
返回false;
}
Senddata,“退出\r\n”);
检查\u响应(s,SMTPResponse.QUIT\u SUCCESS);
s、 Close();
返回true;
}
私有静态void Senddata(套接字、字符串消息)
{
字节[]_msg=Encoding.ASCII.GetBytes(msg);
s、 发送(_msg,0,_msg.Length,SocketFlags.None);
}
专用静态布尔检查\u响应(套接字s、SMTPResponse响应\u预期)
{
字符串响应;
int响应;
字节[]字节=新字节[1024];
而(s.Available==0)
{
系统线程线程睡眠(100);
}
s、 接收(字节,0,s.可用,SocketFlags.None);
sResponse=Encoding.ASCII.GetString(字节);
响应=转换为32(响应子字符串(0,3));
如果(响应!=(int)响应(预期)
返回false;
返回true;
}
}
我用这个:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using System.Text;

namespace FakeSMTP
{
    class TestClass
    {
        public static void Main()
        {
            MailMessage mail = new MailMessage("guesswho@hi.com.pl", "guesswho@xyz.pl");
            SmtpClient client = new SmtpClient();
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = false;
            client.Host = "kappa.it.com.ru"";
            client.Port = 69;
            mail.Subject = "Zgłoszenie z systemu OZ <<547-gf45d>>";
            mail.Body = "TUTAJ PODAJE CAŁE ZGŁOSZENIE Z SYSTEMU - można odpowiadać z Outlooka.";

            SmtpDirect.Send(mail);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Net.Mail;
使用系统文本;
名称空间FakeSMTP
{
类TestClass
{
公共静态void Main()
{
MailMessage mail=新的MailMessage(“guesswho@hi.com.pl", "guesswho@xyz.pl");
SmtpClient=新的SmtpClient();
client.DeliveryMethod=SmtpDeliveryMethod.Network;
client.UseDefaultCredentials=false;
client.Host=“kappa.it.com.ru”;
客户端端口=69;
mail.Subject=“Zgłoszenie z systemu OZ”;
mail.Body=“TUTAJ PODAJE CAŁE ZGŁOSZENIE Z SYSTEMU-można odpowiadaćZ Outlooka。”;
SmtpDirect.Send(邮件);
}
}
}
没关系

byte[] _msg = Encoding.UTF8.GetBytes(msg);
帮助