TML 使用超级链接与网络上的另一个文档相连。
几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。
实例
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
<a href="/index.html">本文本</a> 是一个指向本网站中的一个页面的链接。</p>
<p><a href="http://www.microsoft.com/">本文本</a> 是一个指向万维网上的页面的链接。</p>
</body>
</html>
[/demo]
本例演示如何在 HTML 文档中创建链接。
将图像作为链接
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
您也可以使用图像来作链接:
<a href="/example/html/lastpage.html">
<img border="0" src="./imagecopy1234567890/test.gif" />
</a>
</p>
</body>
</html>
[/demo]
本例演示如何使用图像作为链接。
(可以在本页底端找到更多实例)
HTML 超链接(链接)
超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。
当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。
我们通过使用 <a> 标签在 HTML 中创建链接。
有两种使用 <a> 标签的方式:
通过使用 href 属性 - 创建指向另一个文档的链接
通过使用 name 属性 - 创建文档内的书签
什么是超文本?
标记语言的真正威力在于其收集能力,它可以将收集来的文档组合成一个完整的信息库,并且可以将文档库与世界上的其他文档集合链接起来。
这样的话,读者不仅可以完全控制文档在屏幕上的显示,还可以通过超链接来控制浏览信息的顺序。这就是 HTML 和 XHTML 中的 “HT” - 超文本(hypertext),就是它将整个 Web 网络连接起来。
超文本的基础知识
超文本的基本特征就是可以超链接文档;你可以指向其他位置,该位置可以在当前的文档中、局域网中的其他文档,也可以在因特网上的任何位置的文档中。这些文档组成了一个杂乱的信息网。目标文档通常与其来源有某些关联,并且丰富了来源;来源中的链接元素则将这种关系传递给浏览者。
超链接可以用于各种效果。超链接可以用在目录和主题列表中。浏览者可以在浏览器屏幕上单击鼠标或在键盘上按下按键,从而选择并自动跳转到文档中自己感兴趣的那个主题,或跳转到世界上某处完全不同的集合中的某个文档。
超链接还可以向浏览者指出有关文档中某个主题的更多信息。例如,“如果您想了解更详细的信息,请参阅某某页面。”。作者可以使用超链接来减少重复信息。例如,我们建议创作者在每个文档中都签署上自己的姓名。这样就可以使用一个将名字和另一个包含地址、电话号码等信息的单独文档链接起来的超链接,而不必在每个文档中都包含完整的联系信息。
超链接(hyper text),或者按照标准叫法称为锚(anchor),是使用 <a> 标签标记的,可以用两种方式表示。锚的一种类型是在文档中创建一个热点,当用户激活或选中(通常是使用鼠标)这个热点时,会导致浏览器进行链接。浏览器会自动加载并显示同一文档或其他文档中的某个部分,或触发某些与因特网服务相关的操作,例如发送电子邮件或下载特殊文件等。锚的另一种类型会在文档中创建一个标记,该标记可以被超链接引用。
还有一些与超链接相关联的鼠标相关事件。这些事件与 JavaScript 结合使用可以产生一些令人激动的效果。
注释
锚的这两种类型都使用同样的标签;也许这就是它们拥有同样的名称的原因。但是我们发现,如果将它们区分开,把提供热点和超链接地址的锚看作“链接”,而用于标记文档的目标部分的锚称为“锚”,那么您将更容易理解这两种类型的锚。
HTML 链接语法
链接的 HTML 代码很简单。它类似这样:
<a href="url">Link text</a>
href 属性规定链接的目标。
开始标签和结束标签之间的文字被作为超级链接来显示。
实例
<a href="http://www.w3school.com.cn/">Visit W3School</a>
上面这行代码显示为:Visit W3School
点击这个超链接会把用户带到 W3School 的首页。
提示:"链接文本" 不必一定是文本。图片或其他 HTML 元素都可以成为链接。
HTML 链接 - target 属性
使用 Target 属性,你可以定义被链接的文档在何处显示。
下面的这行会在新窗口打开文档:
<a href="http://www.w3school.com.cn/" target="_blank">Visit W3School!</a>
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<a href="http://www.w3school.com.cn/" target="_blank">Visit W3School!</a>
<p>如果把链接的 target 属性设置为 "_blank",该链接会在新窗口中打开。</p>
</body>
</html>
[/demo]
HTML 链接 - name 属性
name 属性规定锚(anchor)的名称。
您可以使用 name 属性创建 HTML 页面中的书签。
书签不会以任何特殊方式显示,它对读者是不可见的。
当使用命名锚(named anchors)时,我们可以创建直接跳至该命名锚(比如页面中某个小节)的链接,这样使用者就无需不停地滚动页面来寻找他们需要的信息了。
命名锚的语法:
<a name="label">锚(显示在页面上的文本)</a>
提示:锚的名称可以是任何你喜欢的名字。
提示:您可以使用 id 属性来替代 name 属性,命名锚同样有效。
实例
首先,我们在 HTML 文档中对锚进行命名(创建一个书签):
<a name="tips">基本的注意事项 - 有用的提示</a>
然后,我们在同一个文档中创建指向该锚的链接:
<a href="#tips">有用的提示</a>
您也可以在其他页面中创建指向该锚的链接:
<a href="http://www.w3school.com.cn/html/html_links.asp#tips">有用的提示</a>
在上面的代码中,我们将 # 符号和锚名称添加到 URL 的末端,就可以直接链接到 tips 这个命名锚了。
基本的注意事项 - 有用的提示:
注释:请始终将正斜杠添加到子文件夹。假如这样书写链接:href="http://www.w3school.com.cn/html",就会向服务器产生两次 HTTP 请求。这是因为服务器会添加正斜杠到这个地址,然后创建一个新的请求,就像这样:href="http://www.w3school.com.cn/html/"。
提示:命名锚经常用于在大型文档开始位置上创建目录。可以为每个章节赋予一个命名锚,然后把链接到这些锚的链接放到文档的上部。如果您经常访问百度百科,您会发现其中几乎每个词条都采用这样的导航方式。
提示:假如浏览器找不到已定义的命名锚,那么就会定位到文档的顶端。不会有错误发生。
更多实例
在新的浏览器窗口打开链接
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<a href="http://www.w3school.com.cn/" target="_blank">Visit W3School!</a>
<p>如果把链接的 target 属性设置为 "_blank",该链接会在新窗口中打开。</p>
</body>
</html>
[/demo]
本例演示如何在新窗口打开一个页面,这样的话访问者就无需离开你的站点了。
链接到同一个页面的不同位置
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
<a href="#C4">查看 Chapter 4。</a>
</p>
<h2>Chapter 1</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 2</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 3</h2>
<p>This chapter explains ba bla bla</p>
<h2><a name="C4">Chapter 4</a></h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 5</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 6</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 7</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 8</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 9</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 10</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 11</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 12</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 13</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 14</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 15</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 16</h2>
<p>This chapter explains ba bla bla</p>
<h2>Chapter 17</h2>
<p>This chapter explains ba bla bla</p>
</body>
</html>
[/demo]
本例演示如何使用链接跳转至文档的另一个部分
跳出框架
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>被锁在框架中了吗?</p>
<a href="/index.html"
target="_top">请点击这里!</a>
</body>
</html>
[/demo]
本例演示如何跳出框架,假如你的页面被固定在框架之内。
创建电子邮件链接
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
这是邮件链接:
<a href="mailto:someone@microsoft.com?subject=Hello%20again">发送邮件</a>
</p>
<p>
<b>注意:</b>应该使用 %20 来替换单词之间的空格,这样浏览器就可以正确地显示文本了。
</p>
</body>
</html>
[/demo]
本例演示如何链接到一个邮件。(本例在安装邮件客户端程序后才能工作。)
创建电子邮件链接 2
[demo]
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
这是另一个 mailto 链接:
<a href="mailto:someone@microsoft.com?cc=someoneelse@microsoft.com&bcc=andsomeoneelse2@microsoft.com&subject=Summer%20Party&body=You%20are%20invited%20to%20a%20big%20summer%20party!">发送邮件!</a>
</p>
<p>
<b>注意:</b>应该使用 %20 来替换单词之间的空格,这样浏览器就可以正确地显示文本了。
</p>
</body>
</html>
[/demo]
本例演示更加复杂的邮件链接。
HTML 链接标签
标签 描述
<a> 定义锚。
击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言
发送邮件是一个很常见的需求:用户邮箱验证、邮箱召回等。Go 语言标准库自带 net/smtp 库,实现了 smtp 协议,用于发送邮件。然而这个库比较原始,使用不方便,而且官方声明不再增加新功能。于是乎出现了一些强大的第三方邮件库,今天推荐的这个库就是其中之一。
项目地址:https://github.com/jordan-wright/email,Star 数 1.3k+。
email 包的设计易于使用,但又足够灵活以免受到限制。目的是为开发者提供友好的电子邮件接口。
该包当前支持以下功能:
先安装:
$ go get github.com/jordan-wright/email
后使用,使用 Gmail 发送邮件:
e := email.NewEmail()
e.From = "Jordan Wright <test@gmail.com>"
e.To = []string{"test@example.com"}
e.Bcc = []string{"test_bcc@example.com"}
e.Cc = []string{"test_cc@example.com"}
e.Subject = "Awesome Subject"
e.Text = []byte("Text Body is, of course, supported!")
e.HTML = []byte("<h1>Fancy HTML is supported, too!</h1>")
e.Send("smtp.gmail.com:587", smtp.PlainAuth("", "test@gmail.com", "password123", "smtp.gmail.com"))
可见该库最终还是使用标准库 net/smtp 进行实际的邮件发送。
e.From = "Go语言中文网<polaris@studygolang.com>”
收到的邮件不会显示发件人,有人提了一个 PR 支持 non-US-ASCII,但还未被 merge;根据该 PR 的提示,我们可以这样解决此问题:
e.From = mime.QEncoding.Encode("UTF-8", "Go语言中文网") + "<polaris@studygolang.com>"
tlsConfig := &tls.Config{
InsecureSkipVerify: true,
ServerName: smtpHost,
}
e.SendWithTLS(addr, auth, tlsConfig)
如果邮件中需要带上附件,这个库很方便:
e.AttachFile("test.txt")
也可以是通过 io.Reader 读取文件:
func (e *Email) Attach(r io.Reader, filename string, c string) (a *Attachment, err error)
其中 filename 是放入附件显示的文件名,c 是 Content-Type,如果为空,则使用 application/octet-stream。
该库还支持连接池,例如:
p, err := email.NewPool(
"smtp.qq.com:25",
4,
smtp.PlainAuth("", "274768166@qq.com", "password", "smtp.qq.com"))
通过 p 的 Send 方法执行发送操作:
p.Send(e, 10e9)
完整例子如下:
package main
import (
"log"
"mime"
"net/smtp"
"net/textproto"
"strconv"
"sync"
"github.com/jordan-wright/email"
)
func main() {
var wg sync.WaitGroup
ch := make(chan *email.Email, 4)
err := sendEmailByPool(ch, &wg)
if err != nil {
panic(err)
}
for i := 0; i < 4; i++ {
wg.Add(1)
ch <- &email.Email{
To: []string{"polaris@studygolang.com"},
From: mime.QEncoding.Encode("UTF-8", "Go语言中文网") + "<274768166@qq.com>",
Subject: "Pool" + strconv.Itoa(i),
HTML: []byte("<h1>这是 HTML 正文</h1>"),
Headers: textproto.MIMEHeader{},
}
}
wg.Wait()
close(ch)
}
func sendEmailByPool(ch <-chan *email.Email, wg *sync.WaitGroup) error {
p, err := email.NewPool(
"smtp.qq.com:25",
4,
smtp.PlainAuth("", "274768166@qq.com", "password", "smtp.qq.com"))
if err != nil {
return err
}
for i := 0; i < 4; i++ {
go func() {
for e := range ch {
err := p.Send(e, 10e9)
if err != nil {
log.Println("Send Email fail, err:", err)
} else {
log.Println("Send Email Successfully!")
}
wg.Done()
}
}()
}
return nil
}
通过上面的介绍,你应该掌握了该库的使用,该库是不是满足了你对发邮件的需求?
最后附上一个完整的带附件的发邮件程序:
package main
import (
"log"
"mime"
"net/smtp"
"strings"
"github.com/jordan-wright/email"
)
func main() {
sendEmail("测试第三方 email 库", "xuxinhua@studygolang.com")
}
func sendEmail(subject string, tos ...string) error {
e := email.NewEmail()
smtpUsername := "274768166@qq.com"
e.From = mime.QEncoding.Encode("UTF-8", "Go语言中文网") + "<274768166@qq.com>"
e.To = tos
e.Subject = subject
e.HTML = []byte("<h1>HTML 正文</h1>")
e.AttachFile("zap.log")
auth := smtp.PlainAuth("", smtpUsername, "password", "smtp.qq.com")
err := e.Send("smtp.qq.com:25", auth)
if err != nil {
log.Println("Send Mail to", strings.Join(tos, ","), "error:", err)
return err
}
log.Println("Send Mail to", strings.Join(tos, ","), "Successfully")
return nil
}
挑战30天在头条写日记#
关于电子邮件和网页等服务如何使用网络进行连接的概述,具体的操作步骤和操作指南:
打开您的电子邮件客户端,如Microsoft Outlook、Gmail、Apple Mail等。
在客户端中找到 "设置" 或 "首选项" 选项。
选择 "添加账户" 或 "新建邮箱账户"。
输入您的电子邮件地址和密码。
在配置中,选择 "手动设置" 或 "高级设置"。
输入电子邮件提供商提供的服务器设置信息,包括传入(IMAP或POP3)和传出(SMTP)服务器地址、端口号、加密类型等。
确保您的用户名和密码正确。
客户端将尝试连接到电子邮件服务器。
测试是否能够成功接收和发送电子邮件。
一旦测试连接成功,保存设置并完成配置。
您可开始发送和接收电子邮件。
启动您的Web浏览器,如Google Chrome、Mozilla Firefox、Microsoft Edge等。
在浏览器的地址栏中输入您要访问的网页的URL(统一资源定位符)。
浏览器会将输入的URL发送给DNS(域名系统)服务器,以获取与该网址相关的IP地址。
一旦浏览器知道服务器的IP地址,它将建立一个TCP(传输控制协议)连接到服务器。
服务器接收到浏览器的请求,并将网页的内容作为HTTP(超文本传输协议)响应返回给浏览器。
浏览器接收到服务器的响应后,将网页的HTML、CSS和JavaScript等内容渲染到您的屏幕上。
您现在可在浏览器中浏览网页,与页面上的链接交互,填写表单等。
电子邮件使用诸如SMTP、POP3和IMAP等协议进行通信,而网页使用HTTP和HTTPS协议与服务器交互,这些协议和通信方式都是标准化的。
*请认真填写需求信息,我们会在24小时内与您取得联系。