mport javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.Properties;
//最近寫的qq郵箱發(fā)送,也遇到一些問題,163的老是被攔截,后來(lái)QQ的成功了。所有分享給大家。
//這個(gè)只是發(fā)送一些簡(jiǎn)單文字,圖片和附件大家研究一下就知道了。csdn上我也發(fā)表了
public class MailSend {
public static String myEmailAccount="XXXXXXXXXXX@qq.com";//自己郵箱的賬戶
// 發(fā)件人郵箱的 SMTP 服務(wù)器地址, 必須準(zhǔn)確, 不同郵件服務(wù)器地址不同, 一般(只是一般, 絕非絕對(duì))格式為: smtp.xxx.com
public static String EmaiPHost="smtp.qq.com";
public static String receiveMailAccount="XXXXXXXXXXXX@qq.com";
public static void main(String[] args) throws Exception {
// 1. 創(chuàng)建參數(shù)配置, 用于連接郵件服務(wù)器的參數(shù)配置
Properties props=new Properties(); // 參數(shù)配置
props.setProperty("mail.transport.protocol", "smtp"); // 使用的協(xié)議(JavaMail規(guī)范要求)
props.setProperty("mail.smtp.host", EmaiPHost ); // 發(fā)件人的郵箱的 SMTP 服務(wù)器地址
props.setProperty("mail.smtp.auth", "true"); // 需要請(qǐng)求認(rèn)證
//開啟ssl安全驗(yàn)證
props.setProperty("mail.smtp.port", smtpPort);
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", smtpPort);
// 2. 根據(jù)配置創(chuàng)建會(huì)話對(duì)象, 用于和郵件服務(wù)器交互
Session session=Session.getDefaultInstance(props);
session.setDebug(true); // 設(shè)置為debug模式, 可以查看詳細(xì)的發(fā)送 log
// 3. 創(chuàng)建一封郵件
MimeMessage message=createMimeMessage(session, myEmailAccount, receiveMailAccount);
// 4. 根據(jù) Session 獲取郵件傳輸對(duì)象
Transport transport=session.getTransport();
transport.connect(myEmailAccount, "XXXXXXXXXX");//連接,XXXXXXXX填的是qq郵箱的授權(quán)碼,登錄QQ郵箱,然后在設(shè)置里面p0p3/smtp哪一塊可以看到,協(xié)議必須打開。
//登錄qq郵箱---設(shè)置----賬戶-----然后下面可以看到,然后生成授權(quán)碼。
// 6. 發(fā)送郵件, 發(fā)到所有的收件地址, message.getAllRecipients() 獲取到的是在創(chuàng)建郵件對(duì)象時(shí)添加的所有收件人, 抄送人, 密送人
// for(int i=0;i<100;i++){
transport.sendMessage(message, message.getAllRecipients());//發(fā)送出去,那個(gè)for循環(huán)是我發(fā)給我朋友玩的,他直接收到100條
// }
// 7. 關(guān)閉連接
transport.close();
}
/**
*
* @param session
* @param sendMail 發(fā)件人郵箱
* @param receiveMail 收件人郵箱
* @return
* @throws Exception
*/
public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
// 1. 創(chuàng)建一封郵件
MimeMessage message=new MimeMessage(session);
// 2. From: 發(fā)件人
message.setFrom(new InternetAddress(sendMail, "你的大哥", "UTF-8"));
// 3. To: 收件人(可以增加多個(gè)收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "謝", "UTF-8"));
// 4. Subject: 郵件主題
message.setSubject("你好", "UTF-8");
// 5. Content: 郵件正文(可以使用html標(biāo)簽)
message.setContent("這是一封重要郵件,來(lái)自一根麻辣", "text/html;charset=UTF-8");
// 6. 設(shè)置發(fā)件時(shí)間
message.setSentDate(new Date());
// 7. 保存設(shè)置
message.saveChanges();
return message;
}
}
怕會(huì)亂了排版,所有將代碼截圖了,方便大家看看。每天發(fā)表一篇JAVA技術(shù)類文章,希望大家留言讓我知道大家需要什么樣的文章。。
分享成果,隨喜正能量】人生,有多少計(jì)較,就有多少痛苦。有多少寬容,就有多少歡樂。痛苦與歡樂都是心靈的折射,就像鏡子里面有什么,決定于鏡子面前的事物。心里放不下,自然成了負(fù)擔(dān),負(fù)擔(dān)越多,人生越不快樂。計(jì)較的心如同口袋,寬容的心猶如漏斗。復(fù)雜的心愛計(jì)較,簡(jiǎn)單的心易快樂。
《VBA信息獲取與處理》教程是我推出第六套教程,目前已經(jīng)是第一版修訂了。這套教程定位于最高級(jí),是學(xué)完初級(jí),中級(jí)后的教程。這部教程給大家講解的內(nèi)容有:跨應(yīng)用程序信息獲得、隨機(jī)信息的利用、電子郵件的發(fā)送、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時(shí)操作,剪貼板應(yīng)用、Split函數(shù)擴(kuò)展、工作表信息與其他應(yīng)用交互,F(xiàn)SO對(duì)象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數(shù)等等內(nèi)容。程序文件通過32位和64位兩種OFFICE系統(tǒng)測(cè)試。是非常抽象的,更具研究的價(jià)值。
教程共兩冊(cè),八十四講。今日的內(nèi)容是專題八“VBA與HTML文檔”的第二節(jié)上半部分:HTML文檔元素
大家好,我們這講開始HTML的講解,為了認(rèn)識(shí)這種特殊的語(yǔ)言,我們要先看看這種語(yǔ)言中的各種元素個(gè)代表什么意義。上節(jié)中在講這種語(yǔ)言的特征時(shí)講過,標(biāo)簽是用來(lái)描述網(wǎng)頁(yè)的。瀏覽器讀取HTML文檔,識(shí)別標(biāo)簽,并按標(biāo)簽要求以網(wǎng)頁(yè)進(jìn)行顯示文本。大部分標(biāo)簽都是成隊(duì)出現(xiàn)的。
起始標(biāo)簽和結(jié)束標(biāo)簽之間的所有文本,都叫做元素。也就是這個(gè)格式就是:
<起始標(biāo)簽:也叫元素名>元素的內(nèi)容<結(jié)束標(biāo)簽:/+元素名>
標(biāo)簽是可以擁有屬性的,屬性提供了元素的一些附加信息,起始標(biāo)簽,有時(shí)候格式如下:
<元素名 屬性名稱=”屬性值”>
同時(shí),元素是可以擁有元素的,即某個(gè)元素的內(nèi)容有時(shí)候是一個(gè)子元素。
元素這東西,比較抽象,我們可以把它且當(dāng)作一個(gè)對(duì)象來(lái)理解,例如工作簿對(duì)象,每個(gè)工作簿的名稱都不一樣(屬性),每個(gè)工作簿里面都有工作表(子元素),每個(gè)表都有名稱(屬性),里面填寫的內(nèi)容也不一樣(元素的內(nèi)容)。
在上一講中我們舉了一個(gè)最為簡(jiǎn)單的實(shí)例來(lái)說明HTML文檔:
<html>
<body>
<h1>學(xué)習(xí)VBA語(yǔ)言</h1>
<p>為了更好的掌握VBA的各個(gè)知識(shí)點(diǎn),您可以參考我的第一套教程:VBA代碼解決方案</p>
</body>
</html>
我們將上面的格式修正一下,如下面:
<html>
<head> <!--注釋:文檔頭部,文檔相關(guān)消息,并不提供文檔內(nèi)容-->
<title>
VBA應(yīng)用提高篇
</title>
</head>
<body> <!--注釋:文檔主體-->
<h1>學(xué)習(xí)VBA語(yǔ)言</h1>
<p>為了更好的掌握VBA的各個(gè)知識(shí)點(diǎn),您可以先參考我的第一套教程:VBA代碼解決方案</p>
</body>
</html>
將上面的內(nèi)容寫入記事本中保存為.html文件:HTML基礎(chǔ)學(xué)習(xí)-1.html
然后我們雙擊打開這個(gè)文件,看看瀏覽器的翻譯效果:
我們?cè)倏纯淳W(wǎng)頁(yè)的源碼:
從上面的框架代碼,我們可以看出,一般的頁(yè)面,都有html元素,其一般內(nèi)含兩個(gè)元素,一個(gè)是head元素,一個(gè)是body元素。Head元素僅僅說明文檔的相關(guān)消息,并不展示文檔實(shí)體,body元素才是真正展示文檔主體的,所有要在頁(yè)面展示的元素,都要在body內(nèi)進(jìn)行書寫。
1)HTML標(biāo)題 <h1> - <h6>
標(biāo)題(Heading)是通過 <h1> - <h6> 等標(biāo)簽進(jìn)行定義的。<h1> 定義最大的標(biāo)題。<h6> 定義最小的標(biāo)題。瀏覽器會(huì)自動(dòng)地在標(biāo)題的前后添加空行。標(biāo)題很重要,將 HTML heading 標(biāo)簽只用于標(biāo)題。不要僅僅是為了產(chǎn)生粗體或大號(hào)的文本而使用標(biāo)題。因?yàn)橛脩艨梢酝ㄟ^標(biāo)題來(lái)快速瀏覽您的網(wǎng)頁(yè),所以用標(biāo)題來(lái)呈現(xiàn)文檔結(jié)構(gòu)是很重要的。應(yīng)該將 h1 用作主標(biāo)題(最重要的),其后是 h2(次重要的),再其次是 h3,以此類推。在HTML基礎(chǔ)學(xué)習(xí).HTML文件中我們已經(jīng)用到了標(biāo)題的元素
2)HTML水平線 <hr />
<hr /> 標(biāo)簽在 HTML 頁(yè)面中創(chuàng)建水平線。可用于分隔內(nèi)容。
[待續(xù)]
本節(jié)參考文件:HTML基礎(chǔ)學(xué)習(xí)-1.html;HTML基礎(chǔ)學(xué)習(xí)-2.html
我20多年的VBA實(shí)踐經(jīng)驗(yàn),全部濃縮在下面的各個(gè)教程中,教程學(xué)習(xí)順序:
【分享成果,隨喜正能量】人生,一歲有一歲的味道,一站有一站的風(fēng)景,你的年齡應(yīng)該成為你生命的勛章而不是你傷感的理由。 ??
者 | Mateusz Iwaniuk
譯者 | 明明如月,責(zé)編 | 夕顏
出品 | CSDN(ID:CSDNnews)
文章配套代碼: https://github.com/iwaniukooo11/email-sender
現(xiàn)在,即使是創(chuàng)建最基本的網(wǎng)站,程序員也必須使用現(xiàn)代的功能和技術(shù)。甚至像為你的朋友創(chuàng)建簡(jiǎn)單的投資組合這樣的基本項(xiàng)目也可能涉及到一些問題,比如從聯(lián)系人表單接收數(shù)據(jù)。有很多方法可以讀取這些數(shù)據(jù)。你可以將表單與數(shù)據(jù)庫(kù)連接起來(lái),然后從數(shù)據(jù)庫(kù)中讀取傳入的消息來(lái)實(shí)現(xiàn)功能,但這樣做會(huì)給不懂技術(shù)的客戶造成困難。
你為什么不通過發(fā)送電子郵件傳輸信息?
不使用數(shù)據(jù)庫(kù)就能接收到傳入的消息,絕對(duì)是最佳選擇,也是最方便用戶的選擇。但問題來(lái)了—如何實(shí)現(xiàn)呢?你可能認(rèn)為需要使用某種后端語(yǔ)言。
實(shí)際上,你不必使用任何如 php 或 python 這種后端語(yǔ)言,你甚至不需要用到 node.js!你需要的就是一個(gè)簡(jiǎn)單的EmailJS 庫(kù)。
本文將介紹下面兩個(gè)重要功能:
配置 emailjs 帳戶
使用 JS 發(fā)送電子郵件
請(qǐng)注意,在我的項(xiàng)目中,我使用了 gulp 和 webpack,我在 src 文件夾存放源碼,dist 存放最終發(fā)布版本的代碼。
我將分 5 個(gè)步驟向你展示如何從頭開始構(gòu)建電子郵件發(fā)送器。
步驟1-用 HTML 創(chuàng)建表單
首先需要?jiǎng)?chuàng)建一個(gè) HTML 表單。你不必放置像 required 或 max 這種驗(yàn)證屬性,因?yàn)樯院螅琾reventDefault 函數(shù)將在你的提交事件上運(yùn)行,它會(huì)讓這些屬性的處理失效。
表單中最重要的是為每個(gè)輸入放置 name 屬性,后面會(huì)用到。
我的非常簡(jiǎn)單的表單是這樣的:
src/html/index.html
<form class="form">
<input name='name' type="text" placeholder="Your name..." class="form__input" />
<input name='topic' type="text" placeholder="Topic..." class="form__input" />
<textarea name='message' type="text" placeholder="Your Message..." class="form__input" ></textarea>
<input type="submit" value="send" class="form__input form__input--button">
</form>
步驟2-注冊(cè)成為 email 用戶
要配置你的電子郵件,你必須注冊(cè)電子郵件服務(wù)。別擔(dān)心—使用這個(gè)網(wǎng)站非常方便和省時(shí)。
登入后,系統(tǒng)會(huì)詢問你的電子郵件服務(wù),它位于個(gè)人電子郵件服務(wù)區(qū)(personal email service)。在我的例子中,我選擇了 gmail。
然后,你需要連接你的 gmail 帳戶。這將用來(lái)發(fā)送電子郵件給你客戶。例如,如果你關(guān)聯(lián)了 xyz@gmail.com 賬戶,你后續(xù)發(fā)送的郵件都將從這個(gè)郵箱發(fā)出。所以不要擔(dān)心“ Send email on your behalf” 這個(gè)授權(quán)信息—這正是你需要的!
連接完 gmail 賬戶后,點(diǎn)擊添加服務(wù)(add service)按鈕。
步驟3-創(chuàng)建郵件模板
如果你已經(jīng)成功連接了你的 gmail 賬戶,你現(xiàn)在應(yīng)該在信息中心中。現(xiàn)在需要?jiǎng)?chuàng)建電子郵件模板了。
切換到電子郵件模板卡,并單擊創(chuàng)建一個(gè)新的模板(create a new template)。界面非常友好,所以創(chuàng)建模板不會(huì)有任何問題。
你可以選擇模板的名稱和 ID。我稱之為“我的神奇模板(my_amazing_template)”。
接下來(lái),你必須指定郵件的內(nèi)容。
模板的變量值來(lái)自 input 中的 `name` 屬性。你已將變量插入`{{{}}}`符號(hào)中。
不要忘記在“收件人”部分 (右側(cè)) 添加電子郵件地址。你的電子郵件將被發(fā)送到該電子郵件地址上。截圖中的收件人郵箱是我自己的公司郵箱。
這是我的簡(jiǎn)單模板,它使用來(lái)自 HTML 表單里的 3 個(gè)變量。我還指定了接收電子郵件的主題。
步驟4-保存 API 密鑰
這部分沒什么特別的。Emailjs 共享授權(quán) API 密鑰,將在發(fā)送電子郵件時(shí)使用。當(dāng)然,放這些鑰匙最好的地方是`.env` 配置。但是因?yàn)槲沂褂玫氖呛?jiǎn)單的靜態(tài)文件,我不想使用服務(wù)器配置,所以我將它們保存在 apikeys 文件中,然后再將它們導(dǎo)入。
你的 USER_ID 位于 Account > API Keys 菜單下。
TEMPLATE_ID 位于模板的標(biāo)題下面。
這是我基于不存在的 keyssrc / js / apikeys. js 的示例配置.
src/js/apikeys.js
export default {
USER_ID :'user_DPUd-rest-of-my-id',
TEMPLATE_ID:'my_amazing_template'
}
如果需要將源碼發(fā)布到 GITHUB,不要忘記將 APIKEYS 文件添加到 .GITIGNORE文件中
現(xiàn)在是該項(xiàng)目最后也是最重要的部分的了。現(xiàn)在我們必須使用 javascript 發(fā)送電子郵件。
首先,你必須下載 emailjs 包。
npm i emails-com
然后,轉(zhuǎn)到 js 文件,導(dǎo)入庫(kù)和 apikeys。
src/js/main.js
import emailjs from 'emailjs-com'
import apiKeys from './apikeys'
現(xiàn)在是編寫發(fā)送電子郵件功能的時(shí)候了
src/js/main.js
const sendEmail=e=> {
e.preventDefault
emailjs
.sendForm('gmail', apiKeys.TEMPLATE_ID, e.target, apiKeys.USER_ID)
.then(
result=> {
console.log(result.text)
},
error=> {
console.log(error.text)
}
)
}
sendForm 函數(shù)有4個(gè)參數(shù):
你的電子郵件的 ID,在這里:
TEMPLATE_ID 來(lái)自 apikey 文件,
事件對(duì)象來(lái)自你的表單提交
USER_ID 來(lái)自 apikey 文件,
最后,查找表單并添加提交事件監(jiān)聽器:
src/js/main.js
const form=document.querySelector('.form')
form.addEventListener('submit',sendEmail)
正如我前面提到的,由于 `preventDefault` 函數(shù),屬性驗(yàn)證將無(wú)法工作。你必須使用 JS 自己進(jìn)行驗(yàn)證和清除輸入。
以上就是全部?jī)?nèi)容,接下來(lái)讓我們測(cè)試一下。
填寫頁(yè)面上的表單并發(fā)送。
我收到電子郵件,內(nèi)容正是根據(jù)我們的模板和表單數(shù)據(jù)渲染出來(lái)的。
通過上圖可以看出,所有的變量的值都填充到了正確的位置上。
通過本文的介紹你會(huì)發(fā)現(xiàn)用 JS 發(fā)送郵件并非難事。
使用 emailjs,你可以簡(jiǎn)單的方式發(fā)送電子郵件。
我相信你未來(lái)的用戶會(huì)很高興收到來(lái)自他們網(wǎng)頁(yè)上表單填寫數(shù)據(jù)的t郵件,相信本文對(duì)你有幫助。
這篇文章的配套代碼在這里: https://github.com/iwaniukooo11/email-sender
原文鏈接:
https://dev.to/iwaniukooo11/send-e-mails-directly-from-front-end-with-js-5d7d
本文為CSDN翻譯文章,轉(zhuǎn)載請(qǐng)注明出處。
?我們想研發(fā)一個(gè)機(jī)器學(xué)習(xí)框架,6 個(gè)月后失敗了
?生產(chǎn)型機(jī)器學(xué)習(xí)已經(jīng)沒那么困難了?
?視頻 | 你不知道的"開源"60年秘史
?GitHub標(biāo)星10,000+,Apache項(xiàng)目ShardingSphere的開源之路
?阿里技術(shù)專家告訴你,如何畫出優(yōu)秀的架構(gòu)圖?
?加拿大API平臺(tái)如何做到30%為中國(guó)明星項(xiàng)目?創(chuàng)業(yè)老兵這樣說……
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。