最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)郵件發(fā)送

 更新時(shí)間:2020年04月24日 08:43:05   作者:ZNineSun  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)郵件發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)郵件發(fā)送的具體代碼,供大家參考,具體內(nèi)容如下

1.使用socket通信功能實(shí)現(xiàn)java的郵件傳輸

1.1 什么是socet

Socket的英文原義是“孔”或“插座”。在網(wǎng)絡(luò)編程中,網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket。
Socket套接字是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過(guò)程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。
Socket本質(zhì)是編程接口(API),對(duì)TCP/IP的封裝,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開(kāi)發(fā)所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數(shù)據(jù)的具體形式;Socket是發(fā)動(dòng)機(jī),提供了網(wǎng)絡(luò)通信的能力。

1.2.Socket的原理

Socket實(shí)質(zhì)上提供了進(jìn)程通信的端點(diǎn)。進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個(gè)端點(diǎn),否則是沒(méi)有辦法建立聯(lián)系并相互通信的。正如打電話之前,雙方必須各自擁有一臺(tái)電話機(jī)一樣
套接字之間的連接過(guò)程可以分為三個(gè)步驟:服務(wù)器監(jiān)聽(tīng),客戶端請(qǐng)求,連接確認(rèn)。
1、服務(wù)器監(jiān)聽(tīng):是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)。
2、客戶端請(qǐng)求:是指由客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。
3、連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽(tīng)到或者說(shuō)接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽(tīng)狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。

1.3. 基于java的socket網(wǎng)絡(luò)編程實(shí)現(xiàn)

Server端Listen監(jiān)聽(tīng)某個(gè)端口是否有連接請(qǐng)求,Client端向Server 端發(fā)出連接請(qǐng)求,Server端向Client端發(fā)回Accept接受消息。這樣一個(gè)連接就建立起來(lái)了。Server端和Client端都可以通過(guò)Send,Write等方法與對(duì)方通信。
對(duì)于一個(gè)功能齊全的Socket,都要包含以下基本結(jié)構(gòu),其工作過(guò)程包含以下四個(gè)基本的步驟:
1、創(chuàng)建Socket;
2、 打開(kāi)連接到Socket的輸入/出流;
3、按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫(xiě)操作;
4、關(guān)閉Socket。

2.具體代碼實(shí)現(xiàn)

我們將用代碼完成郵件的發(fā)送。這在實(shí)際項(xiàng)目中應(yīng)用的非常廣泛,比如注冊(cè)需要發(fā)送郵件進(jìn)行賬號(hào)激活,再比如OA項(xiàng)目中利用郵件進(jìn)行任務(wù)提醒等等。

2.1.使用Java發(fā)送 E-mail 十分簡(jiǎn)單,但是首先你應(yīng)該準(zhǔn)備

JavaMail API

<dependency>
 <groupId>javax.mail</groupId>
 <artifactId>mail</artifactId>
 <version>1.4.7</version>
</dependency>

Java Activation Framework

<dependency>
 <groupId>javax.activation</groupId>
 <artifactId>activation</artifactId>
 <version>1.1.1</version>
</dependency>

得到兩個(gè)jar包

2.2.獲取對(duì)應(yīng)郵箱的權(quán)限 (以qq郵箱為例)

QQ郵箱需要安全驗(yàn)證,我們需要獲取他對(duì)應(yīng)的權(quán)限;
進(jìn)入QQ郵箱–>郵箱設(shè)置–>賬戶,下滑找到POP3/IMAP/SMTP/Exchange/CardDav/CalDav服務(wù),開(kāi)啟POP3/SMTP服務(wù),如圖所示:

2.3.下面開(kāi)始進(jìn)入編程階段:

package com.cn.own.util;

import com.cn.own.model.EmailModel;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import java.util.Properties;

public class JavaSocket {
 private final static String emailKey="16位的授權(quán)碼";
 private final static String emailId_send="發(fā)件人郵箱";//注:要和你的16位授權(quán)碼對(duì)應(yīng)的郵箱
 private final static String emailId_receive="收件人郵箱";

 public static void sendEmail(EmailModel emailModel) throws Exception{
 

 Properties prop = new Properties();
 prop.setProperty("mail.host", "smtp.qq.com"); //// 設(shè)置QQ郵件服務(wù)器
 prop.setProperty("mail.transport.protocol", "smtp"); // 郵件發(fā)送協(xié)議
 prop.setProperty("mail.smtp.auth", "true"); // 需要驗(yàn)證用戶名密碼

 // 關(guān)于QQ郵箱,還要設(shè)置SSL加密,加上以下代碼即可
 MailSSLSocketFactory sf = new MailSSLSocketFactory();
 sf.setTrustAllHosts(true);
 prop.put("mail.smtp.ssl.enable", "true");
 prop.put("mail.smtp.ssl.socketFactory", sf);


 //使用JavaMail發(fā)送郵件的5個(gè)步驟

 //創(chuàng)建定義整個(gè)應(yīng)用程序所需的環(huán)境信息的 Session 對(duì)象

 Session session = Session.getDefaultInstance(prop, new Authenticator() {
 public PasswordAuthentication getPasswordAuthentication() {
 //發(fā)件人郵件用戶名、授權(quán)碼
 return new PasswordAuthentication(emailId_send, emailKey);
 }
 });

 //開(kāi)啟Session的debug模式,這樣就可以查看到程序發(fā)送Email的運(yùn)行狀態(tài)
 session.setDebug(true);

 //2、通過(guò)session得到transport對(duì)象
 Transport ts = session.getTransport();

 //3、使用郵箱的用戶名和授權(quán)碼連上郵件服務(wù)器
 ts.connect("smtp.qq.com", emailId_send, emailKey);

 //4、創(chuàng)建郵件

 //創(chuàng)建郵件對(duì)象
 MimeMessage message = new MimeMessage(session);

 //指明郵件的發(fā)件人
 message.setFrom(new InternetAddress(emailId_receive));

 //指明郵件的收件人,現(xiàn)在發(fā)件人和收件人是一樣的,那就是自己給自己發(fā)
 message.setRecipient(Message.RecipientType.TO, new InternetAddress(emailId_receive));

 //郵件的標(biāo)題
 message.setSubject(emailModel.getTitle());

 //郵件的文本內(nèi)容
 message.setContent(emailModel.getMessage(), "text/html;charset=UTF-8");

 //5、發(fā)送郵件
 ts.sendMessage(message, message.getAllRecipients());
 
 // re=ts
 ts.close();
 


 }
}

下面附上EmailModel

package com.cn.own.model;

public class EmailModel {
 private String title;//郵件標(biāo)題
 private String message;//郵件內(nèi)容

 public String getTitle() {
 return title;
 }

 public void setTitle(String title) {
 this.title = title;
 }

 public String getMessage() {
 return message;
 }

 public void setMessage(String message) {
 this.message = message;
 }
}

下面我們用一個(gè)單元測(cè)試進(jìn)行測(cè)試:

package com.cn.own.junitTest;

import com.cn.own.util.JavaSocket;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Test {
 @org.junit.Test
 public void testSendEmail() throws Exception{

 JavaSocket.sendEmail(new EmailModel("title","message"));
 }
}

至此就結(jié)束了簡(jiǎn)單的文本類型的郵件發(fā)送

3.帶圖片和附件的郵件

先認(rèn)識(shí)兩個(gè)類一個(gè)名詞:
MIME(多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型)
MimeBodyPart類
javax.mail.internet.MimeBodyPart類 表示的是一個(gè)MIME消息,它和MimeMessage類一樣都是從Part接口繼承過(guò)來(lái)。
MimeMultipart類
javax.mail.internet.MimeMultipart是抽象類 Multipart的實(shí)現(xiàn)子類,它用來(lái)組合多個(gè)MIME消息。一個(gè)MimeMultipart對(duì)象可以包含多個(gè)代表MIME消息的MimeBodyPart對(duì)象。

3.1.代碼實(shí)現(xiàn)

3.1.1 創(chuàng)建包含內(nèi)嵌圖片的郵件

前面的例子中是單獨(dú)的使用HTML或者是純文本內(nèi)容,但是有時(shí)候我們需要在純文本中使用內(nèi)嵌的方式顯示一些圖片,因此就要將純文本和內(nèi)嵌圖片單獨(dú)存放在MimeBodyPart中然后再將其存放在一個(gè)Mimemultipart對(duì)象中即可。

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;

public class SendImageEmail {
 public static void main(String[] args) throws Exception {

 Properties prop = new Properties();
 prop.setProperty("mail.host", "smtp.qq.com"); //// 設(shè)置QQ郵件服務(wù)器
 prop.setProperty("mail.transport.protocol", "smtp"); // 郵件發(fā)送協(xié)議
 prop.setProperty("mail.smtp.auth", "true"); // 需要驗(yàn)證用戶名密碼

 // 關(guān)于QQ郵箱,還要設(shè)置SSL加密,加上以下代碼即可
 MailSSLSocketFactory sf = new MailSSLSocketFactory();
 sf.setTrustAllHosts(true);
 prop.put("mail.smtp.ssl.enable", "true");
 prop.put("mail.smtp.ssl.socketFactory", sf);

 //使用JavaMail發(fā)送郵件的5個(gè)步驟

 //1、創(chuàng)建定義整個(gè)應(yīng)用程序所需的環(huán)境信息的 Session 對(duì)象
 Session session = Session.getDefaultInstance(prop, new Authenticator() {
 public PasswordAuthentication getPasswordAuthentication() {
 //發(fā)件人郵件用戶名、授權(quán)碼
 return new PasswordAuthentication("545646733@qq.com", "授權(quán)碼");
 }
 });


 //開(kāi)啟Session的debug模式,這樣就可以查看到程序發(fā)送Email的運(yùn)行狀態(tài)
 session.setDebug(true);

 //2、通過(guò)session得到transport對(duì)象
 Transport ts = session.getTransport();

 //3、使用郵箱的用戶名和授權(quán)碼連上郵件服務(wù)器
 ts.connect("smtp.qq.com", "545646733@qq.com", "授權(quán)碼");

 //4、創(chuàng)建郵件

 //創(chuàng)建郵件
 MimeMessage message = new MimeMessage(session);

 // 設(shè)置郵件的基本信息
 //發(fā)件人
 message.setFrom(new InternetAddress("545646733@qq.com"));
 //收件人
 message.setRecipient(Message.RecipientType.TO, new InternetAddress("545646733@qq.com"));
 //郵件標(biāo)題
 message.setSubject("帶圖片的郵件");

 // 準(zhǔn)備郵件數(shù)據(jù)

 // 準(zhǔn)備圖片數(shù)據(jù)
 MimeBodyPart image = new MimeBodyPart();
 DataHandler dh = new DataHandler(new FileDataSource("src/resources/bz.jpg"));
 image.setDataHandler(dh);
 image.setContentID("bz.jpg");

 // 準(zhǔn)備正文數(shù)據(jù)
 MimeBodyPart text = new MimeBodyPart();
 text.setContent("這是一封郵件正文帶圖片<img src='cid:bz.jpg'>的郵件", "text/html;charset=UTF-8");

 // 描述數(shù)據(jù)關(guān)系
 MimeMultipart mm = new MimeMultipart();
 mm.addBodyPart(text);
 mm.addBodyPart(image);
 mm.setSubType("related");

 //設(shè)置到消息中,保存修改
 message.setContent(mm);
 message.saveChanges();

 //5.發(fā)送郵件
 ts.sendMessage(message, message.getAllRecipients());
 ts.close();
 }
}

3.2.2 帶圖片和附件的復(fù)雜郵件發(fā)送

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class SendFileMail {
 public static void main(String[] args) throws MessagingException, GeneralSecurityException {

 //創(chuàng)建一個(gè)配置文件保存并讀取信息
 Properties properties = new Properties();

 //設(shè)置qq郵件服務(wù)器
 properties.setProperty("mail.host","smtp.qq.com");
 //設(shè)置發(fā)送的協(xié)議
 properties.setProperty("mail.transport.protocol","smtp");
 //設(shè)置用戶是否需要驗(yàn)證
 properties.setProperty("mail.smtp.auth", "true");


 //=================================只有QQ存在的一個(gè)特性,需要建立一個(gè)安全的鏈接
 // 關(guān)于QQ郵箱,還要設(shè)置SSL加密,加上以下代碼即可
 MailSSLSocketFactory sf = new MailSSLSocketFactory();
 sf.setTrustAllHosts(true);
 properties.put("mail.smtp.ssl.enable", "true");
 properties.put("mail.smtp.ssl.socketFactory", sf);

 //=================================準(zhǔn)備工作完畢

 //1.創(chuàng)建一個(gè)session會(huì)話對(duì)象;
 Session session = Session.getDefaultInstance(properties, new Authenticator() {
 @Override
 protected PasswordAuthentication getPasswordAuthentication() {
 return new PasswordAuthentication("545646733@qq.com", "授權(quán)碼");
 }
 });

 //可以通過(guò)session開(kāi)啟Dubug模式,查看所有的過(guò)程
 session.setDebug(true);


 //2.獲取連接對(duì)象,通過(guò)session對(duì)象獲得Transport,需要捕獲或者拋出異常;
 Transport tp = session.getTransport();

 //3.連接服務(wù)器,需要拋出異常;
 tp.connect("smtp.qq.com","545646733@qq.com","授權(quán)碼");

 //4.連接上之后我們需要發(fā)送郵件;
 MimeMessage mimeMessage = imageMail(session);

 //5.發(fā)送郵件
 tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());

 //6.關(guān)閉連接
 tp.close();

 }


 public static MimeMessage imageMail(Session session) throws MessagingException {

 //消息的固定信息
 MimeMessage mimeMessage = new MimeMessage(session);

 //郵件發(fā)送人
 mimeMessage.setFrom(new InternetAddress("545646733@qq.com"));
 //郵件接收人,可以同時(shí)發(fā)送給很多人,我們這里只發(fā)給自己;
 mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("545646733@qq.com"));
 mimeMessage.setSubject("我也不知道是個(gè)什么東西就發(fā)給你了"); //郵件主題


 /*
 編寫(xiě)郵件內(nèi)容
 1.圖片
 2.附件
 3.文本
 */

 //圖片
 MimeBodyPart body1 = new MimeBodyPart();
 body1.setDataHandler(new DataHandler(new FileDataSource("src/resources/yhbxb.png")));
 body1.setContentID("yhbxb.png"); //圖片設(shè)置ID

 //文本
 MimeBodyPart body2 = new MimeBodyPart();
 body2.setContent("請(qǐng)注意,我不是廣告<img src='cid:yhbxb.png'>","text/html;charset=utf-8");

 //附件
 MimeBodyPart body3 = new MimeBodyPart();
 body3.setDataHandler(new DataHandler(new FileDataSource("src/resources/log4j.properties")));
 body3.setFileName("log4j.properties"); //附件設(shè)置名字

 MimeBodyPart body4 = new MimeBodyPart();
 body4.setDataHandler(new DataHandler(new FileDataSource("src/resources/1.txt")));
 body4.setFileName(""); //附件設(shè)置名字

 //拼裝郵件正文內(nèi)容
 MimeMultipart multipart1 = new MimeMultipart();
 multipart1.addBodyPart(body1);
 multipart1.addBodyPart(body2);
 multipart1.setSubType("related"); //1.文本和圖片內(nèi)嵌成功!

 //new MimeBodyPart().setContent(multipart1); //將拼裝好的正文內(nèi)容設(shè)置為主體
 MimeBodyPart contentText = new MimeBodyPart();
 contentText.setContent(multipart1);

 //拼接附件
 MimeMultipart allFile =new MimeMultipart();
 allFile.addBodyPart(body3); //附件
 allFile.addBodyPart(body4); //附件
 allFile.addBodyPart(contentText);//正文
 allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有類型設(shè)置為mixed;


 //放到Message消息中
 mimeMessage.setContent(allFile);
 mimeMessage.saveChanges();//保存修改


 return mimeMessage;

 }

}

至此所有的郵件功能均已實(shí)現(xiàn)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java項(xiàng)目導(dǎo)入IDEA的流程配置以及常見(jiàn)問(wèn)題解決方法

    Java項(xiàng)目導(dǎo)入IDEA的流程配置以及常見(jiàn)問(wèn)題解決方法

    通常一個(gè)團(tuán)隊(duì)中可能有人用eclipse,有人用intelliJ,那么經(jīng)常會(huì)出現(xiàn)需要導(dǎo)入別人用eclipse建好的web項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于Java項(xiàng)目導(dǎo)入IDEA的流程配置以及常見(jiàn)問(wèn)題解決方法的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • springboot集成開(kāi)發(fā)實(shí)現(xiàn)商場(chǎng)秒殺功能

    springboot集成開(kāi)發(fā)實(shí)現(xiàn)商場(chǎng)秒殺功能

    這篇文章主要介紹了springboot集成實(shí)現(xiàn)商品秒殺功能,秒殺系統(tǒng)業(yè)務(wù)流程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java 中Thread.join()的使用方法

    java 中Thread.join()的使用方法

    這篇文章主要介紹了java 中Thread.join()的使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • java.Net.UnknownHostException異常處理問(wèn)題解決

    java.Net.UnknownHostException異常處理問(wèn)題解決

    這篇文章主要介紹了java.Net.UnknownHostException異常處理方法,問(wèn)題原因是在系統(tǒng)的?/etc/Hostname中配置了主機(jī)名,而在/etc/hosts文件中沒(méi)有相應(yīng)的配置,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-03-03
  • java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例

    java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例

    這篇文章主要介紹了java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例,需要的朋友可以參考下
    2014-05-05
  • 基于Java語(yǔ)言實(shí)現(xiàn)Socket通信的實(shí)例

    基于Java語(yǔ)言實(shí)現(xiàn)Socket通信的實(shí)例

    今天小編就為大家分享一篇關(guān)于基于Java語(yǔ)言實(shí)現(xiàn)Socket通信的實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Java跳躍游戲?qū)嵗骖}解決思路詳解

    Java跳躍游戲?qū)嵗骖}解決思路詳解

    這篇文章主要介紹了Java跳躍游戲,總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路
    2022-10-10
  • Java Lambda表達(dá)式的方法引用和構(gòu)造器引用實(shí)例分析

    Java Lambda表達(dá)式的方法引用和構(gòu)造器引用實(shí)例分析

    這篇文章主要介紹了Java Lambda表達(dá)式的方法引用和構(gòu)造器引用,結(jié)合實(shí)例形式分析了Lambda表達(dá)式的方法引用和構(gòu)造器引用相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • SpringBoot與Spring之間的對(duì)比

    SpringBoot與Spring之間的對(duì)比

    這篇文章主要介紹了SpringBoot與Spring之間的對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 圖解Spring容器中實(shí)例化bean的四種方式

    圖解Spring容器中實(shí)例化bean的四種方式

    這篇文章主要介紹了圖解Spring容器中實(shí)例化bean的四種方式,傳統(tǒng)應(yīng)用程序可以通過(guò)new和反射方式進(jìn)行實(shí)例化Bean,而Spring IOC容器則需要根據(jù) Bean 定義里的配置元數(shù)據(jù),使用反射機(jī)制來(lái)創(chuàng)建Bean,需要的朋友可以參考下
    2023-11-11

最新評(píng)論

华容县| 澄城县| 布尔津县| 中方县| 新昌县| 东阿县| 古蔺县| 奇台县| 乡宁县| 二连浩特市| 皋兰县| 山东省| 信宜市| 旬阳县| 长武县| 班玛县| 河东区| 白城市| 清苑县| 青河县| 白玉县| 嘉黎县| 山丹县| 昆明市| 绥阳县| 富民县| 桐柏县| 太仆寺旗| 大连市| 哈巴河县| 会泽县| 平度市| 花莲市| 天门市| 密山市| 浦北县| 阜宁县| 海南省| 南昌市| 册亨县| 庄河市|