热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

.NET发送电子邮件的讲解流程网络耗子

System.Net.Mail简介收藏System.Net.Mail命名空间是在.NETFramework中新增的,该命名空间提供了发送电子邮件的功能。通过对本章的学习,读

.NET 发送电子邮件的讲解流程

System.Net.Mail 简介 收藏
System.Net.Mail命名空间是在.NET Framework中新增的,该命名空间提供了发送电子邮件的功能。通过对本章的学习,读者可以轻松地使用.NET Framework提供的类库来发送电子邮件。

本章的讲解流程如图18-1所示。

 

图18-1  发送电子邮件的讲解流程

18.1  System.Net.Mail 简介
System.Net.Mail命名空间包含用于将电子邮件发送到SMTP服务器的类,这些类需要结合Microsoft SMTP Server一起使用。

18.1.1  System.Net.Mail概述
System.Net.Mail命名空间下有SmtpClient类用于发送邮件,可以完全代替SmtpMail类。利用SmtpClient类的Send方法可以完成发送电子邮件的传输,也可以用SendAsync方法进行异步发送,后者发送完成后会产生一个SendCompleted事件来通知发送结果。Send方法可以接受MailMessage类的对象作为参数。通过MailMessage类可以设置邮件更多的内容和格式,例如,为Attachment类设置添加附件的参数。

18.1.2  System.Net.Mail命名空间的类组成
SmtpClient类与SMTP结合在一起,通过MailMessage类、MailAddress类、Attachment类来丰富电子邮件的内容和设置。图18-2展示了用户通过System.Net.Mail命名空间下的类结合SMTP发送电子邮件的过程。

 

图18-2  System.Net.Mail命名空间的类组成

18.2  管理SMTP的类:SmtpClient类
SmtpClient类封装了将电子邮件发送到SMTP服务器的方法和属性。本节将介绍如何使用SmtpClient类来发送电子邮件。

18.2.1  功能说明
SmtpClient类用于让应用程序向SMTP服务器发送电子邮件,可以通过同步或异步的方法发送电子邮件。通过结合MailMessage类使用,还可以设置邮件的格式、添加抄送人、添加附件等。

18.2.2  语法定义
SmtpClient类的语法定义如下:

public class SmtpClient

下面的代码演示如何创建一个SmtpClient的实例。

SmtpClient  client = new SmtpClient (“smtp.Sina.com”); //直接通过构造函数设置SMTP 主机服务器

或:

SmtpClient  client = new SmtpClient ();

Client. Host =” smtp.Sina.com”; //通过Host属性来设置SMTP 主机服务器

18.2.3  方法详解
SmtpClient类主要使用SMTP来同步或异步地发送电子邮件。其中最常用的方法及其说明如表18-1所示。

发送电子邮件时,只需简单地调用Send方法就可以了,其中Send方法有两个重载:

public void Send (

     MailMessage message

)

表18-1  SmtpClient类的主要方法及其说明

名    称
 说    明
 
Send
 将电子邮件发送到SMTP服务器以便传递。主线程将在此方法传输邮件的过程完成后再执行其他操作
 
SendAsync
 异步发送电子邮件。此方法不会阻止调用线程
 
SendAsyncCancel
 取消异步操作以发送电子邮件
 

其中,参数message 是MailMessage类的一个实例。

public void Send (

     string from,

     string recipients,

     string subject,

     string body

)

第二个重载有4个参数,其代表意义如下。

—  from:包含邮件发件人的地址信息。

—  recipients:包含邮件收件人的地址信息。

—  subject:包含邮件的主题行。

—  body:包含邮件的正文。

下面的代码演示了如何使用Send函数发送电子邮件:

static void Main(string[] args)

        {

        SmtpClient client = new SmtpClient();

        //此处省略了client 属性设置代码

        client.Send("FromMailBox@Sina.com", "ToMailBox@Sina.com", "电子邮件示例", "你好,收到了吗?");

        Console.WriteLine("邮件已经成功发送到{0}", "ToMailBox@Sina.com");

        }

技巧:如果不想主线程等待传输电子邮件完成后再继续执行,可以使用异步SendAsync方法。SendAsync操作完成时会引发SendCompleted事件。

18.2.4  属性详解
SmtpClient类还有几个重要的属性,如表18-2所示。

表18-2  SmtpClient类的主要属性及其说明

名    称
 说    明
 
Host
 获取或设置SMTP事务的服务器名称或IP地址
 
Port
 获取或设置SMTP事务的端口
 
Credentials
 获取或设置验证发件人身份的凭据
 
UseDefaultCredentials
 获取或设置Boolean值,该值控制DefaultCredentials是否随请求一起发送。如果使用默认凭据,则为true,否则为false。默认值为false
 

若要使用SmtpClient发送电子邮件,Host, Port, Credentials这三个属性是必须设置的。Host属性在前面已经介绍过。Port属性设置用于SMTP事务的端口,该属性的默认值为25。Credentials属性是一个IcredentialsByHost类型。下面的代码演示了如何使用这些属性:

static void Main(string[] args)

 {

     SmtpClient client = new SmtpClient();

     client.Host = "smtp.Sina.com";

     client.Port = 25;

     client.Credentials =  new System.Net.NetworkCredential("账号", "***密码**");

     Console.WriteLine(" SMTP 事务的主机:{0} 端口:{1} 账号:{2} 密码:{3}", client.Host,client. Port,

        ((System.Net.NetworkCredential)client.Credentials).UserName,

        ((System.Net.NetworkCredential)client.Credentials).Password);

}

上面的代码输出结果为:

SMTP 事务的主机: smtp.Sina.com 端口:25 账号: 账号 密码: ***密码**

18.2.5  典型应用:异步发送电子邮件
下面演示如何使用SmtpClient类异步发送电子邮件,代码如下:

   static bool mailSent = false;//标志邮件是否发送成功

   public static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)

            {

                String token = (string)e.UserState;

                if (e.Cancelled)

                {

                    Console.WriteLine("取消发送" + token);

                }

                if (e.Error != null)

                {

                    Console.WriteLine(e.Error.ToString());

                }

                else

                {

                    Console.WriteLine("邮件已经发送");

                }

                mailSent = true;

            }

            public static void Main(string[] args)

            {

               MailAddress from = new MailAddress("applehuang2000@Sina.com ", "测试账号");

               //收件人地址

               MailAddress to = new MailAddress("h.gp@163.com", "hello");

               MailMessage message = new MailMessage(from, to);

               message.Subject = "标题"; // 设置邮件的标题

               message.Body = "发送邮件的正文";

               message.BodyEncoding = System.Text.Encoding.Default;

               //创建一个SmtpClient 类的新实例,并初始化实例的SMTP 事务的服务器

               SmtpClient client = new SmtpClient(@"smtp.Sina.com");

               client.DeliveryMethod = SmtpDeliveryMethod.Network;

               client.UseDefaultCredentials = false;

               client.EnableSsl = false;

               //身份认证

               client.Credentials = new

System.Net.NetworkCredential("applehuang2000@Sina.com", "123456");

               client.SendCompleted += new

               SendCompletedEventHandler(SendCompletedCallback);

               client.SendAsync(message, "测试");

               Console.WriteLine("输入字母C取消发送");

               string answer = Console.ReadLine();

               if (answer.StartsWith("c") && mailSent == false)

               {

                   client.SendAsyncCancel();//取消发送

               }

               message.Dispose();

            }

18.3  管理电子邮件内容的类:MailMessage类
MailMessage类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以使用MailMessage类的关联属性。

18.3.1  功能说明
MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。该类提供了丰富的属性来创建电子邮件,例如可以用Attachments属性添加附件。当一个广告设计师需要以网页的形式向客户发送某产品的广告,还需要抄送给自己的上司时,则可以设置MailMessage类的IsBodyHtml属性为true,并在CC属性中添加其上司的电子邮箱地址来同时发送。

18.3.2  语法定义
MailMessage类的语法定义如下:

public class MailMessage :IDisposable

该类的构造函数有三个重载。下面的代码演示如何创建一个MailMessage类的实例:

MailMessage message = new MailMessage ();//无参数

//通过构造函数设置SMTP 主机服务器      

MailMessage message = new MailMessage (“smtp.Sina.com”);    

//通过构造函数设置SMTP 主机服务器 和端口      

MailMessage message = new MailMessage (“smtp.Sina.com”,25);  

18.3.3  属性详解
MailMessage类除了继承父类的方法外,没有提供其他方法。但其提供了丰富的属性,如表18-3所示。

表18-3  MailMessage类的主要属性及其说明

名    称
 说    明
 
AlternateViews
 为了防止有些电子邮件阅读程序无法显示HTML内容,该属性存储了邮件正文的替代形式的附件集合
 
Attachments
 包含了此电子邮件的所有附件
 
Bcc
 包含了所有此电子邮件密件抄送的收件人地址
 
Body
 邮件的正文
 
BodyEncoding
 邮件正文的编码
 
CC
 包含了所有此电子邮件抄送的收件人地址
 
DeliveryNotificationOptions
 DeliveryNotificationOptions枚举类型,确定此电子邮件的发送通知
 
From
 电子邮件发信人的地址
 
Headers
 电子邮件的标头
 
IsBodyHtml
 Boolean值,设置邮件正文是文本还是Html格式,默认为文本
 
Priority
 电子邮件的优先级
 
ReplyTo
 电子邮件的回复地址,一般与发信人地址相同
 
Sender
 电子邮件的发件人地址
 
Subject
 电子邮件的主题
 
SubjectEncoding
 电子邮件的主题内容的编码
 
To
 包含所有电子邮件的收件人的地址
 

18.3.4  典型应用:使用MailMessage类设置电子邮件的内容
下面通过设置MailMessage类的属性,丰富电子邮件的内容。代码如下:

static void Main(string[] args)

        {

            SmtpClient client = new SmtpClient();

            //此处省略 SmtpClient 类的其他属性设置

            MailMessage message = new MailMessage();

            //添加密件抄送人,可以添加多个

            message.Bcc.Add("First@domain.com");

            message.Bcc.Add("Second@domain.com");

            message.Body = "这是邮件的正文部分";

            //设置正文的编码形式.这里的设置为取系统默认编码

            message.BodyEncoding = System.Text.Encoding.Default;

            //添加一般抄送人,可以添加多个

            message.Bcc.Add("First@domain.com");

            message.Bcc.Add("Second@domain.com");

            //邮件传送通知选项

            message.DeliveryNotificatiOnOptions= DeliveryNotificationOptions.OnFailure;

            message.From =new MailAddress("FromMailBox@Sina.com");

            message.IsBodyHtml = false;

            //设置邮件的优先级为正常

            message.Priority = MailPriority.Normal;

            message.ReplyTo = new MailAddress("FromMailBox@Sina.com");

            message.Sender = new MailAddress("FromMailBox@Sina.com");

            message.Subject = "这是邮件的主题";

            //设置主题的编码形式.这里的设置为取系统默认编码

            message.SubjectEncoding = System.Text.Encoding.Default;

            client.Send(message); //发送邮件

            Console.WriteLine("发送成功!");

}

在上面的代码中用到了DeliveryNotificationOptions枚举类型。该类型有5个成员值,具体代表意义如下。

—  Delay:通知传送是否延迟。

—  Never:从不通知。

—  None:没有通知。

—  OnFailure:通知传送是否失败。

—  OnSuccess:通知传送是否成功。

18.4  管理电子邮件地址的类:MailAddress类
MailAddress类表示电子邮件的地址。该类结合SmtpClient类或MailMessage类使用,其实例存储了电子邮件的地址信息。本节将介绍如何使用该类来设置电子邮件的地址。

18.4.1  功能说明
MailAddress类是.NET Framework新增的类,可以设置电子邮件发件人或收件人的地址。通过该类的属性可以获取电子邮件地址的联系人的详细信息。例如邮件中显示联系人的名字和SMTP服务器上的用户名。

18.4.2  语法定义
MailAddress类的语法定义如下:

public class MailAddress

该类的构造函数有三个重载,下面的代码演示如何创建其实例:

//指定电子邮件的地址构造一个新实例

MailAddress FromMailBox = new MailAddress (“FromMailBox@Sina.com”);

//指定电子邮件的地址和显示名称构造一个新实例  

MailAddress FromMailBox = new MailAddress (“FromMailBox@Sina.com”,”显示名称”);    

//指定电子邮件的地址、显示名称和显示名称的编码构造一个新实例

MailAddress FromMailBox = new MailAddress ("FromMailBox@Sina.com","显示名称",System.Text.Encoding.Default);

18.4.3  属性详解
MailAddress类除了继承父类的方法外,没有提供其他方法。该类的主要属性及其说明如表18-4所示。

表18-4  MailAddress类的主要属性及其说明

名    称
 说    明
 
Address
 获取电子邮件的地址
 
DisplayName
 获取在电子邮件显示的名称
 
Host
 获取服务器名称,也就是在电子邮件地址@符号后的服务器名
 
User
 获取用户名称,也就是在电子邮件地址@符号前的用户名
 

18.4.4  典型应用:通过MailAddress类获取邮件地址信息
下面演示如何通过构造一个MailAddress类的实例,从其属性中获取电子邮件地址的信息。代码如下:

static void Main(string[] args)

        {

           MailAddress FromMailBox = new MailAddress (“FromMailBox@Sina.com”,”张三”);  

           Console.WriteLine("电子邮箱地址是:{0} 显示名:{1} 服务器名:{2} 用户名:{3}", FromMailBox.Address,FromMailBox.DisplayName,FromMailBox.Host,FromMailBox. User);

        }

上面的代码输出结果为:

电子邮箱地址是: FromMailBox@Sina.com 显示名:张三 服务器名: Sina.com 用户名: FromMailBox

18.5  表示电子邮件附件的类:Attachment类
Attachment类表示电子邮件的附件的集合。该类结合MailMessage类一起使用,可以为电子邮件添加附件。本节将介绍如何给电子邮件添加附件。

18.5.1  功能说明
Attachment类与MailMessage类结合在一起使用,用于给电子邮件添加附件。该类可以使用字符类型(String)和数据流(Stream)的形式创建附件。支持数据流的形式就意味着能用任何的文件格式作为附件,例如TXT格式或DOC格式。

18.5.2  语法定义
Attachment类的语法定义如下:

public class Attachment : AttachmentBase

该类的构造函数有6个重载,下面演示创建一个Attachment类的实例的两种常用方式。

Attachment Item = new Attachment (@“c:\附件.txt”, MediaTypeNames.Text.Plain);

以上这种情况,第一个参数为附件的路径,第二个参数为附件的MIME内容标头信息,简单来说就是标明文件的格式。

System.IO.FileInfo file =new System.IO.FileInfo(@"C:\附件.txt");

System.IO.FileStream stream = file.OpenRead();

Attachment item = new Attachment(stream, MediaTypeNames.Text.Plain);

第二种情况,第一个参数以数据流的方式传入。数据流可以从文件中读出,也可以从数据库中读出。第二个参数跟上一种情况相同。

18.5.3  方法详解
除了通过new关键字实例化一个Attachment类对象外,还可以用Attachment类提供的静态方法CreateAttachmentFromString来创建该类的一个实例。下面的代码演示了如何使用CreateAttachmentFromString方法:

Attachment Item =Attachment.CreateAttachmentFromString(@“c:\附件.txt”, MediaTypeNames.Text.Plain);

18.5.4  属性详解
Attachment类通过一些属性来访问附件的内容,其中几个重要属性及其说明如表18-5所示。

表18-5  Attachment类的主要属性及其说明

名    称
 说    明
 名    称
 说    明
 
ContentDisposition
 附件的MIME内容处置
 ContentType
 附件内容的类型
 
ContentStream
 附件的流数据
 Name
 附件内容的类型名称
 

下面用例子来说明Attachment类属性的用法。

static void Main(string[] args)

   {

       Attachment cOntent= new Attachment(@"c:\附件.txt", MediaTypeNames.Text.Plain);

       ContentDisposition disposition = content.ContentDisposition;

       disposition.FileName = "文本附件";

       Console.WriteLine("附件内容名称:{0} 类型名称:{1} 附件文件名:{2}",content.Name,content.ContentType.MediaType,content.ContentDisposition.FileName);}

上面的代码输出结果为:

附件内容名称:附件.txt 类型名称:text/plain 附件文件名:文本附件

18.5.5  典型应用:使用Attachment类添加电子邮件的附件
下面演示如何使用Attachment类为电子邮件添加一个文本附件,代码如下:

static void Main(string[] args)

      {

          SmtpClient client = new SmtpClient();

          //此处省略 SmtpClient 类的其他属性设置

          MailMessage message = new MailMessage();

          message.Body = "这是邮件的正文部分";

          //设置正文的编码形式.这里的设置为取系统默认编码

          message.BodyEncoding = System.Text.Encoding.Default;

          message.From = new MailAddress("FromMailBox@Sina.com");

          message.IsBodyHtml = false;

          message.ReplyTo = new MailAddress("FromMailBox@Sina.com");

          message.Sender = new MailAddress("FromMailBox@Sina.com");

          message.Subject = "这是邮件的主题";

          //添加附件

          Attachment cOntent= new Attachment(@"c:\附件.txt", MediaTypeNames.Text.Plain);

          message.Attachments.Add(content);

          //设置主题的编码形式.这里的设置为取系统默认编码

          message.SubjectEncoding = System.Text.Encoding.Default;

          client.Send(message); //发送邮件

          Console.WriteLine("发送成功!");

      }

18.6  应用实例:发送电子邮件程序
结合本章学习的内容,下面将实现一个电子邮件发送程序,详细步骤如下。

     在VS2005中创建一个Windows应用程序,命名为“SendMail”。

     打开默认生成的Form1的设计界面。从工具箱中选择控件,把界面设计成图18-3所示的样式。

 

图18-3  示例界面设计

     设置控件的属性,其中主要控件的属性设置如表18-6所示。

表18-6  主要控件属性

类    型
 描    述
 Name属性
 其    他
 
TextBox
 收件人地址
 txtAddress
 
 
TextBox
 标题
 txtTitle
 
 
TextBox
 内容
 txtContent
 Mutiline属性为True
 
TextBox
 附件
 txtAttachment
 ReadOnly属性为True
 
Button
 发送
 btSend
 
 
Button
 添加附件
 btAddAttachment
 
 

     双击“发送”按钮,打开代码视图,在代码窗口的顶部添加对命名空间的引用,代码如下:

using System.Net.Mail;

     在“发送”按钮的Click事件中,添加对SendMail函数的调用,代码如下:

private void btSend_Click(object sender, EventArgs e)

{

    if (SendMail())

    {

        MessageBox.Show("发送成功");

    }

}

   编写SendMail函数,代码如下:

//发送电子邮件成功返回True,失败返回False

private bool SendMail()

{

    MailAddress from = new MailAddress("FromMailBox@Sina.com ", "测试账号");

    //收件人地址

    MailAddress to = new MailAddress(this.txtAddress.Text, "hello");

    MailMessage message = new MailMessage(from, to);

    //添加附件,判断文件存在就添加

    if(System.IO.File.Exists(this.txtAttachment.Text))

    {

       Attachment item =new Attachment(this.txtAttachment.Text, MediaTypeNames.Text.Plain);

        message.Attachments.Add(item);

    }

    message.Subject = this.txtTitle.Text; // 设置邮件的标题

    message.Body = this.txtContent.Text; //发送邮件的正文

    message.BodyEncoding = System.Text.Encoding.Default;

    MailAddress other = new MailAddress("otherPerson@163.com");

    message.CC.Add(other); //添加抄送人

    //创建一个SmtpClient 类的新实例,并初始化实例的SMTP 事务的服务器

    SmtpClient client = new SmtpClient(@"smtp.Sina.com");

    client.DeliveryMethod = SmtpDeliveryMethod.Network;

    client.UseDefaultCredentials = false;

    client.EnableSsl = false;

    //身份认证

    client.Credentials = new System.Net.NetworkCredential("FromMailBox@Sina.com", "*****");

    bool ret =true; //返回值

    try

    {

        client.Send(message);

     }

    catch (SmtpException ex)

    {

        MessageBox.Show(ex.Message);

        ret =false;

    }

    catch(Exception ex2)

    {

        MessageBox.Show(ex2.Message);

        ret = false;

    }

    return ret;

}


推荐阅读
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 在CentOS系统中部署与配置ZooKeeper详解 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
author-avatar
无淚丑尜鸭
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有