精华内容
下载资源
问答
  • 根据实际情况,会用到根据第三方为我们提供邮件,短信功能。代码如下: (1)邮箱 package com.chengjun.test;import java.io.File; import java.util.Properties;import javax.activation.DataHandler; import ...

    根据实际情况,会用到根据第三方为我们提供邮件,短信功能。代码如下:

    第三方邮箱地址网址:http://sendcloud.sohu.com/

    (1)邮箱
    package com.chengjun.test;

    import java.io.File;
    import java.util.Properties;

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Authenticator;
    import javax.mail.BodyPart;
    import javax.mail.Message.RecipientType;
    import javax.mail.Multipart;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility;

    import com.sun.mail.smtp.SMTPTransport;

    public class SendEmail {

    private static final String SENDCLOUD_SMTP_HOST = "smtp.sendcloud.net";
    private static final int SENDCLOUD_SMTP_PORT = 25;
    
    private static String getMessage(String reply) {
        String[] arr = reply.split("#");
    
        String messageId = null;
    
        if (arr[0].equalsIgnoreCase("250 ")) {
            messageId = arr[1];
        }
    
        return messageId;
    }
    
    public static void main(String[] args) throws Exception {
        // 配置javamail
        Properties props = System.getProperties();
        props.setProperty("mail.transport.protocol", "smtp");
        props.put("mail.smtp.host", SENDCLOUD_SMTP_HOST);
        props.put("mail.smtp.port", SENDCLOUD_SMTP_PORT);
        props.setProperty("mail.smtp.auth", "true");
        props.put("mail.smtp.connectiontimeout", 180);
        props.put("mail.smtp.timeout", 600);
        props.setProperty("mail.mime.encodefilename", "true");
    
        // 使用api_user和api_key进行验证
        final String apiUser = "chengjun202_test_M2V5UR";
        final String apiKey = "ebLQ1y9W4XIVDNT7";
        Session mailSession = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(apiUser, apiKey);
            }
        });
    
        SMTPTransport transport = (SMTPTransport) mailSession.getTransport("smtp");
    
        MimeMessage message = new MimeMessage(mailSession);
        // 发信人
        message.setFrom(new InternetAddress("from@sendcloud.org", "发件人名称", "UTF-8"));
        // 收件人地址
        message.addRecipient(RecipientType.TO, new InternetAddress("收件人地址"));
        // 邮件主题
        message.setSubject("邮件主题", "UTF-8");
    
        Multipart multipart = new MimeMultipart("alternative");
    
        // 添加html形式的邮件正文
        //<html><head></head><body>" + "<p>欢迎使用<a href='http://sendcloud.sohu.com'>SendCloud!</a></p>" + "</body></html>可以任意修改,根据html基本原则;
        String html = "<html><head></head><body>" + "<p>欢迎使用<a href='http://sendcloud.sohu.com'>SendCloud!</a></p>" + "</body></html> ";
        BodyPart contentPart = new MimeBodyPart();
        contentPart.setHeader("Content-Type", "text/html;charset=UTF-8");
        contentPart.setHeader("Content-Transfer-Encoding", "base64");
        contentPart.setContent(html, "text/html;charset=UTF-8");
        multipart.addBodyPart(contentPart);
    
        // 添加附件 ( smtp 方式没法使用文件流 )
        File file = new File("E:/server.xml");
        BodyPart attachmentBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(file);
        attachmentBodyPart.setDataHandler(new DataHandler(source));
        attachmentBodyPart.setFileName(MimeUtility.encodeWord(file.getName()));
        multipart.addBodyPart(attachmentBodyPart);
        message.setContent(multipart);
        // 连接sendcloud服务器,发送邮件
        transport.connect();
        transport.sendMessage(message, message.getRecipients(RecipientType.TO));
        String messageId = getMessage(transport.getLastServerResponse());
        String emailId = messageId + "0$" + "收件人地址";
        System.out.println("messageId:" + messageId);
        System.out.println("emailId:" + emailId);
        transport.close();
    }
    

    }

    需要用到的jar包;

    ![这里写代码片](https://img-blog.csdn.net/20170421172830045?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzUzMzM4NDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

    (2)短信

    package com.chengjun.test;

    /**
    *短信
    */
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.NameValuePair;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;

    public class SendMessage {
    private static String Url = “http://106.ihuyi.cn/webservice/sms.php?method=Submit“;

    public static void main(String[] args) {
    
        HttpClient client = new HttpClient();
        PostMethod method = new PostMethod(Url);
    
        client.getParams().setContentCharset("UTF-8");
        method.setRequestHeader("ContentType",
                "application/x-www-form-urlencoded;charset=UTF-8");
        int mobile_code = (int) ((Math.random() * 9 + 1) * 100000);
        String content = new String("您的验证码是:" + mobile_code + "。请不要把验证码泄露给其他人。");
    
        NameValuePair[] data = {// 提交短信
                new NameValuePair("account", "用户名"), // 查看用户名请登录用户中心->验证码、通知短信->帐户及签名设置->APIID
                new NameValuePair("password", "密码"), // 查看密码请登录用户中心->验证码、通知短信->帐户及签名设置->APIKEY
                new NameValuePair("mobile", "手机号码"),
                new NameValuePair("content", content), };
        method.setRequestBody(data);
    
        try {
            client.executeMethod(method);
    
            String SubmitResult = method.getResponseBodyAsString();
            Document doc = DocumentHelper.parseText(SubmitResult);
            Element root = doc.getRootElement();
            String code = root.elementText("code");
            String msg = root.elementText("msg");
            String smsid = root.elementText("smsid");
            System.out.println(code);
            System.out.println(msg);
            System.out.println(smsid);
            if ("2".equals(code)) {
                System.out.println("短信提交成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    }

    展开全文
  • 用QQ邮箱发送,主要有两个点,一是获取授权码 二是发送,需要实现认证行为类实现作为Session保持会话 import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax....

    配置setting.json

    为下载的mail.jar包,activation.jar包找个家,不需要手动添加到classpath环境变量。
    vscode配置第三方jar包导入

    邮件发送源码

    用QQ邮箱发送,主要有两个点,一是获取授权码
    二是发送,需要实现认证行为类实现作为Session保持会话

    import java.util.Properties;
    
    import javax.mail.Authenticator;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    public class SendHtmlEmail {
        public static void main(String[] args) {
            String to = "920061142@163.com";
            String from = "pardon110@qq.com";
            String host = "smtp.qq.com";
            // qq授权码
            String code = "gkf**g";
    
            Properties props = System.getProperties();
    
            // 设置邮件服务器
            props.setProperty("mail.smtp.host", host);
            props.put("mail.smtp.port", 465);
            props.put("mail.transport.protocol", "smtp");
            props.put("mail.smtp.ssl.enable", "true");
            props.put("mail.debug", "true");
            props.put("mail.smtp.auth", true);
    
            // 获取默认的 Session 对象,帐号密码验证使用匿名类
            Session session = Session.getDefaultInstance(props, new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(from, code);
                }
            });
    
            try {
                MimeMessage msg = new MimeMessage(session);
    
                msg.setFrom(new InternetAddress(from));
                msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    
                msg.setSubject("来自pardon110的邮件");
                // 消息体为html
                msg.setContent("<h1>This is actual message</h1>html", "text/html");
    
                // 使用类对象的静态方法发送
                Transport.send(msg);
    
                System.out.println("Sent html successfully....");
            } catch (MessagingException mex) {
                mex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    msg引用了session,session含认证信息,邮件发送使用的是Transport对象的静态方法send。
    若前期session未包含认证信息,需要在使用Transport实例的sendmsg方法,且在实例之前建立连接时带上认证信息亦可,见Transport实例发件

    效果

    在这里插入图片描述

    展开全文
  • java对接第三方快递---顺丰SDK

    千次阅读 2020-01-10 15:49:18
    背景介绍:APP内商城,需要对接第三方快递,公司本身和顺丰有月结账户合作,故选用顺丰。 开发之前 开始要到丰桥官网注册账号,丰桥会提供客户编码和校验码到你的邮箱;官方有接入教程,没啥可纠结的,一路申请到底...


    背景介绍:APP内商城,需要对接第三方快递,公司本身和顺丰有月结账户合作,故选用顺丰。

    开发之前

    开始要到丰桥官网注册账号,丰桥会提供客户编码和校验码到你的邮箱;官方有接入教程,没啥可纠结的,一路申请到底。

    因为我这边散户多,用户量小,没有对接面单打印SDK,和我一样需求的,可申请免面单,完成审核即可;

    可在“我的API”中添加需要的接口,最后添加顺丰月结账号,以配置生产环境。

    在这里插入图片描述

    接入SDK

    在丰桥官网–帮助中心–软件下载中,有一个官方提供的sdk,下载下来,如图所示:
    在这里插入图片描述
    SF-CSIM-EXPRESS-SDK-V1.6.jar放在项目lib下,在pom文件中添加依赖

        <dependency>
                <groupId>ShunFeng</groupId>
                <artifactId>ShunFeng</artifactId>
                <version>1.0</version>
                <scope>system</scope>
                <systemPath>${basedir}/src/lib/SF-CSIM-EXPRESS-SDK-V1.6.jar</systemPath>
        </dependency>
    

    添加一桥静态变量配置类,替换成你的参数.

    package com.chain.express.config;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/7 12:21
     * @Description:
     */
    public class ShunFenConfig {
    
        // 月结卡号
        public static String cardId="********";
    
        //丰桥平台顾客编码
        public static String  clientCode="********";
    
        //丰桥平台校验码
        public static String checkword="********";
    
        //丰桥平台下订单url
        public static String accessUrl="http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService";
    
    
    }
    
    

    2.1、工具类

    顺丰使用的数据交换格式是xml,需要一个xml转实体的工具类。

    package com.chain.express.utils;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.Unmarshaller;
    import java.io.Reader;
    import java.io.StringReader;
    
    /**
     * XML转实体互转工具类
     * @Auther: songweichao
     * @Date: 2020/1/8 10:20
     * @Description:
     */
    public class XmlBuilder {
    
        /**
         * 将XML转为指定的BEAN
         * @param clazz
         * @param xmlStr
         * @return
         * @throws Exception
         */
        public static Object xmlStrToOject(Class<?> clazz, String xmlStr) throws Exception {
        
            Object xmlObject = null;
            Reader reader = null;
            JAXBContext context = JAXBContext.newInstance(clazz);
            // XML 转为对象的接口
            Unmarshaller unmarshaller = context.createUnmarshaller();
            reader = new StringReader(xmlStr);
            xmlObject = unmarshaller.unmarshal(reader);
    
            if (null != reader) {
                reader.close();
            }
            return xmlObject;
        }
    }
    

    添加一个顺丰组装请求xml的工具类

    package com.chain.express.utils;
    
    import com.chain.base.utils.BaseLogger;
    import com.chain.express.config.ShunFenConfig;
    import com.chain.order.entity.Order;
    
    /**
     * 顺丰工具类
     * @Auther: songweichao
     * @Date: 2020/1/7 12:02
     * @Description:
     */
    public class ExpressUtils extends BaseLogger{
        /**
         * 下订单
         * order 是我自己的订单类,换成你业务中有的POJO
         * @param order
         * @return
         */
        public static String  produce(Order order){
    
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.append("<?xml version='1.0' encoding='UTF-8'?>");
            strBuilder.append("<Request service='OrderService' lang='zh-CN'>");
            strBuilder.append("<Head>" + ShunFenConfig.clientCode + "</Head>");
            strBuilder.append("<Body>");
            strBuilder.append("<Order").append(" ");
            strBuilder.append("orderid='" + order.getOrderNumber() + "'").append(" ");
            //  1 代表顺丰标快 -- 详情查看平台 快件产品类别表,注意:标快支持子母单,速配不支持
            strBuilder.append("express_type='1'").append(" ");
            // 寄件方信息
            strBuilder.append("j_province='北京'").append(" ");
            strBuilder.append("j_city='北京市'").append(" ");
            strBuilder.append("j_county='中国'").append(" ");
            strBuilder.append("j_company='超琦科技有限公司'").append(" ");
            strBuilder.append("j_contact='客服007'").append(" ");
            strBuilder.append("j_tel='18888888888'").append(" ");
            strBuilder.append("j_address='北京市朝阳区'").append(" ");
            // 收件方信息
            strBuilder.append("d_province='" + order.getReceiverProvince() + "'").append(" ");
            strBuilder.append("d_city='" + order.getReceiverCity() + "'").append(" ");
            strBuilder.append("d_county='" + order.getReceiverCounty() + "'").append(" ");
            strBuilder.append("d_county=''").append(" ");
            strBuilder.append("d_company='ceshi'").append(" ");
            strBuilder.append("d_tel='" + order.getReceiverPhone() + "'").append(" ");
            strBuilder.append("d_contact='" +  order.getReceiverPhone() + "'").append(" ");
            strBuilder.append("d_address='" + order.getReceiverAddress() + "'").append(" ");
            strBuilder.append("remark='" + order.getRemark() + "'").append(" ");
            strBuilder.append("parcel_quantity='1'").append(" ");
            strBuilder.append("pay_method='1'").append(" ");
            strBuilder.append("custid ='"+ ShunFenConfig.cardID+"'").append(" ");
            strBuilder.append("customs_batchs=''").append(" ");
           // is_docall这个参数,当你没有申请面单打印,那就取值为1,表示由快递小哥上门取件
            strBuilder.append("is_docall='1'").append(">");
            strBuilder.append("</Order>");
            strBuilder.append("</Body>");
            strBuilder.append("</Request>");
            return strBuilder.toString();
        }
    
        /**
         * 订单结果查询
         * 订单查询接口是在下单后没有返回运单号时主动查询运单号使用
         * @param orderId
         * @return
         */
        public static String query(String orderId){
            StringBuilder strBuilder = new StringBuilder();
    
            strBuilder.append("<?xml version='1.0' encoding='UTF-8'?>");
            strBuilder.append("<Request service='OrderSearchService' lang='zh-CN'>");
            strBuilder.append("<Head>" + ShunFenConfig.clientCode + "</Head>");
            strBuilder.append("<Body>");
            strBuilder.append("<OrderSearch orderid='"+orderId+"'/>");
            strBuilder.append("</Body>");
            strBuilder.append("</Request>");
    
            return strBuilder.toString();
        }
    
        /**
         * 客户在确定将货物交付给顺丰托运后,将面单上的一些重要信息,如快件重量通过此接口发送给顺丰
         * @param orderId
         * @return
         */
        public static String confirm(String orderId){
    
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.append("<?xml version='1.0' encoding='UTF-8'?>");
            strBuilder.append("<Request service='OrderConfirmService' lang='zh-CN'>");
            strBuilder.append("<Head>" + ShunFenConfig.clientCode + "</Head>");
            strBuilder.append("<Body>");
            strBuilder.append("<OrderConfirm orderid='"+orderId+"'dealtype='1' />");
            strBuilder.append("</Body>");
            strBuilder.append("</Request>");
            return strBuilder.toString();
        }
    
    
        /**
         * 客户在发货前取消订单
         * @param orderId
         * @return
         */
        public static String cancle(String orderId){
    
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.append("<?xml version='1.0' encoding='UTF-8'?>");
            strBuilder.append("<Request service='OrderConfirmService' lang='zh-CN'>");
            strBuilder.append("<Head>" + ShunFenConfig.clientCode + "</Head>");
            strBuilder.append("<Body>");
            strBuilder.append("<OrderConfirm orderid='"+orderId+"' dealtype='2' >");
            strBuilder.append("</OrderConfirm>");
            strBuilder.append("</Body>");
            strBuilder.append("</Request>");
            return strBuilder.toString();
        }
    
        /**
         * 客户可通过此接口查询顺丰运单路由,系统将返回当前时间点已发生的路由信息
         * @param expressNumber
         * @return
         */
        public static String trace(String expressNumber){
    
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.append("<?xml version='1.0' encoding='UTF-8'?>");
            strBuilder.append("<Request service='RouteService' lang='zh-CN'>");
            strBuilder.append("<Head>" + ShunFenConfig.clientCode + "</Head>");
            strBuilder.append("<Body>");
            strBuilder.append("<RouteRequest tracking_type='1' method_type='1' tracking_number='"+expressNumber+"' />");
            strBuilder.append("</RouteRequest>");
            strBuilder.append("</Body>");
            strBuilder.append("</Request>");
            return strBuilder.toString();
        }
    
    
    }
    
    

    2.2、测试中

    测试下单接口:

    public static void main(String[] args) {
            /****************************** 下单测试*****************************/
    
            Order order = new Order();
            order.setOrderNumber("TEST20200110");
            order.setReceiverAddress("北京市丰台区花乡桥");
            order.setReceiver("Test");
            order.setReceiverCounty("中国");
            order.setReceiverProvince("北京市");
            order.setReceiverCity("北京市");
            order.setReceiverPhone("18888888886");
    
            String produceBody = ExpressUtils.produce(order);
            System.out.println("下单请求报文:" + produceBody);
            String respXml = CallExpressServiceTools.callSfExpressServiceByCSIM(ShunFenConfig.accessUrl, produceBody, ShunFenConfig.clientCode, ShunFenConfig.checkword);
            System.out.println("下单响应报文:" + respXml);
            SfExpressResponse sfExpressResponse = null;
            try {
                sfExpressResponse = (SfExpressResponse) XmlBuilder.xmlStrToOject(SfExpressResponse.class, respXml);
                OrderResponse orderResponse = sfExpressResponse.getBody().getOrderResponse();
                System.out.println("下订单返回状态码:"+orderResponse.getFilterResult() + "顺丰单号:"+ orderResponse.getMailNo());
    
            } catch (Exception e) {
                System.out.println("下订单返回异常状态码:"+sfExpressResponse.getERROR().getCode() + "响应正文:"+sfExpressResponse.getERROR().getText());
    
                e.printStackTrace();
            }
    
    }
    

    返回结果:

    // 堆栈信息省略......
    下单请求报文:<?xml version='1.0' encoding='UTF-8'?><Request service='OrderService' lang='zh-CN'><Head>SXWXJS</Head><Body><Order orderid='TEST202001101443' express_type='1' j_province='北京' j_city='北京市' j_county='中国' j_company='超琦科技有限公司' j_contact='客服007' j_tel='18888888888' j_address='北京市朝阳区' d_province='北京市' d_city='北京市' d_county='中国' d_county='' d_company='ceshi' d_tel='18888888886' d_contact='18888888886' d_address='北京市丰台区花乡桥' parcel_quantity='1' pay_method='1' custid ='**********' customs_batchs='' is_docall='1'></Order></Body></Request>
    14:43:37.505 [main] DEBUG org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default
    14:43:37.539 [main] DEBUG org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context
    //中间日志省略了......
    下单响应报文:<?xml version='1.0' encoding='UTF-8'?><Response service="OrderService"><Head>OK</Head><Body><OrderResponse filter_result="2" destcode="010" mailno="SF7444402649723" origincode="010" orderid="TEST202001101443"><rls_info rls_errormsg="SF7444402649723:" invoke_result="OK" rls_code="1000"><rls_detail waybillNo="SF7444402649723" sourceCityCode="010" destCityCode="010" destDeptCode="010FT" destDeptCodeMapping="010WB" destTeamCode="044" destTransferCode="010WB" destRouteLabel="010WB-010FT" proName="顺丰标快" cargoTypeCode="C201" limitTypeCode="T4" expressTypeCode="B1" codingMapping="B1B" xbFlag="0" printFlag="000000000" twoDimensionCode="MMM={'k1':'010WB','k2':'010FT','k3':'044','k4':'T4','k5':'SF7444402649723','k6':'','k7':'166127c4'}" proCode="T4" printIcon="00000000" checkCode="166127c4" destGisDeptCode="010FT"/></rls_info></OrderResponse></Body></Response>
    下订单返回状态码:2顺丰单号:SF7444402649723
    

    当然了,你要以同样的单号再次下单,会返回重复下单的错误

    //堆栈信息省略......
    下单请求报文:<?xml version='1.0' encoding='UTF-8'?><Request service='OrderService' lang='zh-CN'><Head>SXWXJS</Head><Body><Order orderid='TEST202001101443' express_type='1' j_province='北京' j_city='北京市' j_county='中国' j_company='超琦科技有限公司' j_contact='客服007' j_tel='18888888888' j_address='北京市朝阳区' d_province='北京市' d_city='北京市' d_county='中国' d_county='' d_company='ceshi' d_tel='18888888886' d_contact='18888888886' d_address='北京市丰台区花乡桥' parcel_quantity='1' pay_method='1' custid ='**********' customs_batchs='' is_docall='1'></Order></Body></Request>
    //中间信息省略......
    下单响应报文:<?xml version='1.0' encoding='UTF-8'?><Response service="OrderService"><Head>ERR</Head><ERROR code="8016">重复下单</ERROR></Response>
    java.lang.NullPointerException
    	at com.chain.pay.service.impl.AliPayServiceImpl.main(AliPayServiceImpl.java:397)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:497)
    	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
    下订单返回异常状态码:8016响应正文:重复下单
    

    路由接口测试:

    public static void main(String[] args) {
    
    /******************************* 路由查询测试******************************/
            System.out.println("-----------------------------------------------");
            String traceBody = ExpressUtils.trace("SF7444402649981");
            System.out.println("请求报文:" + traceBody);
            String resXml3 = CallExpressServiceTools.callSfExpressServiceByCSIM(ShunFenConfig.accessUrl, traceBody, ShunFenConfig.clientCode, ShunFenConfig.checkword);
            System.out.println("响应报文:" + resXml3);
    
            try {
                SfExpressResponse  sfExpressResponse = (SfExpressResponse) XmlBuilder.xmlStrToOject(SfExpressResponse.class, resXml3);
                List<Route> list = sfExpressResponse.getBody().getRouteResponse().getRoute();
                for (int i = 0; i < list.size(); i++) {
                    Route route = list.get(i);
                    System.out.println("-----------路由消息第" + i + "条:-------------");
                    System.out.println("发生时间:"+route.getAcceptTime());
                    System.out.println("节点操作码:"+route.getOpcode());
                    System.out.println("具体描述:"+route.getRemark());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    

    返回结果:

    //堆栈信息省略...
    -----------------------------------------------
    请求报文:<?xml version='1.0' encoding='UTF-8'?><Request service='RouteService' lang='zh-CN'><Head>SXWXJS</Head><Body><RouteRequest tracking_type='1' method_type='1' tracking_number='SF7444402649981' /></RouteRequest></Body></Request>
    //中间信息省略...
    响应报文:<?xml version='1.0' encoding='UTF-8'?><Response service="RouteService"><Head>OK</Head><Body><RouteResponse mailno="SF7444402649981" orderid="TEST202001101505"><Route remark="顺丰速运 已收取快件(测试数据)" accept_time="2018-05-01 08:01:44" accept_address="广东省深圳市软件产业基地" opcode="50"/><Route remark="已签收,感谢使用顺丰,期待再次为您服务(测试数据)" accept_time="2018-05-02 12:01:44" accept_address="广东省深圳市软件产业基地" opcode="80"/></RouteResponse></Body></Response>
    -----------路由消息第0条:-------------
    发生时间:2018-05-01 08:01:44
    节点操作码:50
    具体描述:顺丰速运 已收取快件(测试数据)
    -----------路由消息第1条:-------------
    发生时间:2018-05-02 12:01:44
    节点操作码:80
    具体描述:已签收,感谢使用顺丰,期待再次为您服务(测试数据)
    

    2.3 、JavaBean

    下面几个类是关于顺丰响应码的实体类

    package com.chain.express.entity;
    
    import javax.xml.bind.annotation.*;
    import java.io.Serializable;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/8 10:04
     * @Description:
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlRootElement(name = "Response")
    public class SfExpressResponse implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        //响应状态
        @XmlElement(name = "Head")
        private String Head;
    
        //响应失败原因
        @XmlElement(name = "ERROR")
        private ERROR ERROR;
    
        //响应结果
        @XmlElement(name = "Body")
        private Body Body;
    
        public String getHead() {
            return Head;
        }
    
        public void setHead(String head) {
            Head = head;
        }
    
        public com.chain.express.entity.ERROR getERROR() {
            return ERROR;
        }
    
        public void setERROR(com.chain.express.entity.ERROR ERROR) {
            this.ERROR = ERROR;
        }
    
        public com.chain.express.entity.Body getBody() {
            return Body;
        }
    
        public void setBody(com.chain.express.entity.Body body) {
            Body = body;
        }
    }
    
    
    package com.chain.express.entity;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlValue;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/8 10:05
     * @Description:
     */
    @XmlAccessorType(XmlAccessType.NONE)
    public class ERROR {
    
        @XmlAttribute(name = "code")
        private String code;
    
        @XmlValue
        private String text;
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    }
    
    
    package com.chain.express.entity;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/8 10:06
     * @Description:
     */
    @XmlAccessorType(XmlAccessType.NONE)
    public class Body {
    
        @XmlElement(name = "OrderResponse")
        private OrderResponse OrderResponse;
    
        @XmlElement(name = "RouteResponse")
        private RouteResponse RouteResponse;
    
    
        public com.chain.express.entity.OrderResponse getOrderResponse() {
            return OrderResponse;
        }
    
        public void setOrderResponse(com.chain.express.entity.OrderResponse orderResponse) {
            OrderResponse = orderResponse;
        }
    
        public com.chain.express.entity.RouteResponse getRouteResponse() {
            return RouteResponse;
        }
    
        public void setRouteResponse(com.chain.express.entity.RouteResponse routeResponse) {
            RouteResponse = routeResponse;
        }
    }
    
    
    package com.chain.express.entity;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlRootElement;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/8 10:06
     * @Description:
     */
    @XmlRootElement(name="OrderResponse")
    @XmlAccessorType(XmlAccessType.NONE)
    public class OrderResponse {
    
        //订单号
        @XmlAttribute(name = "orderid")
        private String orderId;
    
        //运单号
        @XmlAttribute(name = "mailno")
        private String mailNo;
    
        //原寄地区域代码(可用于顺丰电子运单标签打印)
        @XmlAttribute(name = "origincode")
        private String originCode;
    
        //目的地区域代码(可用于顺丰电子运单标签打印)
        @XmlAttribute(name = "destcode")
        private String destCode;
    
        //筛单结果:1:人工确认 2:可收派 3:不可以收派
        @XmlAttribute(name = "filter_result")
        private String filterResult;
    
        public String getOrderId() {
            return orderId;
        }
    
        public void setOrderId(String orderId) {
            this.orderId = orderId;
        }
    
        public String getMailNo() {
            return mailNo;
        }
    
        public void setMailNo(String mailNo) {
            this.mailNo = mailNo;
        }
    
        public String getOriginCode() {
            return originCode;
        }
    
        public void setOriginCode(String originCode) {
            this.originCode = originCode;
        }
    
        public String getDestCode() {
            return destCode;
        }
    
        public void setDestCode(String destCode) {
            this.destCode = destCode;
        }
    
        public String getFilterResult() {
            return filterResult;
        }
    
        public void setFilterResult(String filterResult) {
            this.filterResult = filterResult;
        }
    }
    
    
    package com.chain.express.entity;
    
    import javax.xml.bind.annotation.*;
    import java.util.List;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/8 10:07
     * @Description:
     */
    @XmlRootElement(name="RouteResponse")
    @XmlAccessorType(XmlAccessType.NONE)
    public class RouteResponse {
    
        //运单号
        @XmlAttribute(name = "mailno")
        private String mailNo;
    
        //路由
        @XmlElement(name = "Route")
        private List<Route> Route ;
    
        public String getMailNo() {
            return mailNo;
        }
    
        public void setMailNo(String mailNo) {
            this.mailNo = mailNo;
        }
    
        public List<com.chain.express.entity.Route> getRoute() {
            return Route;
        }
    
        public void setRoute(List<com.chain.express.entity.Route> route) {
            Route = route;
        }
    }
    
    
    package com.chain.express.entity;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlRootElement;
    
    /**
     * @Auther: songweichao
     * @Date: 2020/1/8 10:08
     * @Description:
     */
    @XmlRootElement(name="Route")
    @XmlAccessorType(XmlAccessType.NONE)
    public class Route {
    
        //路由节点发生的时间
        @XmlAttribute(name = "accept_time")
        private String acceptTime;
    
    
        //路由节点具体描述
        @XmlAttribute(name = "remark")
        private String remark;
    
    
        //路由节点操作码
        @XmlAttribute(name = "opcode")
        private String opcode;
    
        public String getAcceptTime() {
            return acceptTime;
        }
    
        public void setAcceptTime(String acceptTime) {
            this.acceptTime = acceptTime;
        }
    
        public String getRemark() {
            return remark;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
    
        public String getOpcode() {
            return opcode;
        }
    
        public void setOpcode(String opcode) {
            this.opcode = opcode;
        }
    }
    
    

    记录下,方面下次使用。拿走拿走别客气。

    展开全文
  • 随着中国互联网的发展,业务需求越来越复杂 。所有出现了许多做软件服务的公司,如: 阿里云、百度云、新浪、微信等等公司都推出了一系列的产品服务。这样给了小型公司带来福音。...如何调用调用第三方...

    随着中国互联网的发展,业务需求越来越复杂 。所有出现了许多做软件服务的公司,如: 阿里云、百度云、新浪、微信等等公司都推出了一系列的产品服务。这样给了小型公司带来福音。让开发者把精力放在了需求上面。

    例如:以前的程序员开发一个邮箱发送的邮件的功能,他可能需要自己搭建一个邮箱服务器(麻烦),而现在的开发者只需要找到邮箱服务提供商(如:阿里云),然后对接他们的服务。


    如何调用调用第三方接口( 本文案例:百度云文本审核)

    百度云AI 接口地址

    1.找到你需要调用的服务

    2.选择使用

    3.创建应用,获取调用接口的参数 ( 这里是 API Key ,Sercert Key ,其他服务商大致差不多)

    4.找到接入文档

    5.找到接口地址以及请求参数

    这里content 参数是我们提供的需要审核的内容,access_token 是调用百度API的凭证

    6.获取access_token

    点击进去copy 获取access_token 的Java 代码

    package com.baidu.ai.api.auth;
    
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    /**
     * @作者: tjx
     * @描述:  获取access_token
     * @创建时间: 创建于17:11 2018/9/7
     **/
    public class AuthService {
    
        /**
         * 获取权限token
         * @return 返回示例:
         * {
         * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
         * "expires_in": 2592000
         * }
         */
        public static String getAuth() {
            // 官网获取的 API Key 更新为你注册的
            String clientId = "百度云应用的AK";
            // 官网获取的 Secret Key 更新为你注册的
            String clientSecret = "百度云应用的SK";
            return getAuth(clientId, clientSecret);
        }
    
        /**
         * 获取API访问token
         * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
         * @param ak - 百度云官网获取的 API Key
         * @param sk - 百度云官网获取的 Securet Key
         * @return assess_token 示例:
         * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
         */
        public static String getAuth(String ak, String sk) {
            // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
                    // 1. grant_type为固定参数
                    + "grant_type=client_credentials"
                    // 2. 官网获取的 API Key
                    + "&client_id=" + ak
                    // 3. 官网获取的 Secret Key
                    + "&client_secret=" + sk;
            try {
                URL realUrl = new URL(getAccessTokenUrl);
                // 打开和URL之间的连接
                HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.err.println(key + "--->" + map.get(key));
                }
                // 定义 BufferedReader输入流来读取URL的响应
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String result = "";
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
                /**
                 * 返回结果示例
                 */
                System.err.println("result:" + result);
                JSONObject jsonObject = new JSONObject(result);
                String access_token = jsonObject.getString("access_token");
                return access_token;
            } catch (Exception e) {
                System.err.printf("获取token失败!");
                e.printStackTrace(System.err);
            }
            return null;
        }
    
    
    }
    复制代码

    把创建时候获取的两个参数填进去调试下

    7.封装API

    7.1 封装结果Bean

    /**
     * Copyright 2018 bejson.com
     */
    package com.baidu.ai.api.pojo;
    import java.util.List;
    
    /**
     * Auto-generated: 2018-09-07 17:28:44
     *
     * @author bejson.com (i@bejson.com)
     * @website http://www.bejson.com/java2pojo/
     */
    public class Pass {
    
        private double score;
        private List<String> hit;
        private int label;
        public void setScore(double score) {
            this.score = score;
        }
        public double getScore() {
            return score;
        }
    
        public void setHit(List<String> hit) {
            this.hit = hit;
        }
        public List<String> getHit() {
            return hit;
        }
    
        public void setLabel(int label) {
            this.label = label;
        }
        public int getLabel() {
            return label;
        }
    
    }复制代码
    /**
     * Copyright 2018 bejson.com
     */
    package com.baidu.ai.api.pojo;
    import java.util.List;
    
    /**
     * Auto-generated: 2018-09-07 17:28:44
     *
     * @author bejson.com (i@bejson.com)
     * @website http://www.bejson.com/java2pojo/
     */
    public class Result {
    
        private int spam;
        private List<String> review;
        private List<String> reject;
        private List<Pass> pass;
        public void setSpam(int spam) {
            this.spam = spam;
        }
        public int getSpam() {
            return spam;
        }
    
        public void setReview(List<String> review) {
            this.review = review;
        }
        public List<String> getReview() {
            return review;
        }
    
        public void setReject(List<String> reject) {
            this.reject = reject;
        }
        public List<String> getReject() {
            return reject;
        }
    
        public void setPass(List<Pass> pass) {
            this.pass = pass;
        }
        public List<Pass> getPass() {
            return pass;
        }
    
    }复制代码
    /**
     * Copyright 2018 bejson.com
     */
    package com.baidu.ai.api.pojo;
    
    /**
     * Auto-generated: 2018-09-07 17:28:44
     *
     * @author bejson.com (i@bejson.com)
     * @website http://www.bejson.com/java2pojo/
     */
    public class CheckTextResult {
    
        private long log_id;
        private Result result;
        public void setLog_id(long log_id) {
            this.log_id = log_id;
        }
        public long getLog_id() {
            return log_id;
        }
    
        public void setResult(Result result) {
            this.result = result;
        }
        public Result getResult() {
            return result;
        }
    
    }复制代码

    7.2 封装HttpClient

    package com.utis;
    
    import java.io.IOException;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    /**
     * @作者: tjx
     * @描述:  http请求
     * @创建时间: 创建于16:37 2018/9/7
     **/
    public class HttpUtil {
    
        public static String doGet(String url, Map<String, String> param) {
            // 创建Httpclient对象
            CloseableHttpClient httpclient = HttpClients.createDefault();
            String resultString = "";
            CloseableHttpResponse response = null;
            try {
                // 创建uri
                URIBuilder builder = new URIBuilder(url);
                if (param != null) {
                    for (String key : param.keySet()) {
                        builder.addParameter(key, param.get(key));
                    }
                }
                URI uri = builder.build();
    
                // 创建http GET请求
                HttpGet httpGet = new HttpGet(uri);
    
                // 执行请求
                response = httpclient.execute(httpGet);
                // 判断返回状态是否为200
                if (response.getStatusLine().getStatusCode() == 200) {
                    resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (response != null) {
                        response.close();
                    }
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return resultString;
        }
    
        public static String doGet(String url) {
            return doGet(url, null);
        }
    
        public static String doPost(String url, Map<String, String> param) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建参数列表
                if (param != null) {
                    List<NameValuePair> paramList = new ArrayList<>();
                    for (String key : param.keySet()) {
                        paramList.add(new BasicNameValuePair(key, param.get(key)));
                    }
                    // 模拟表单
                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "utf-8");
                    httpPost.setEntity(entity);
                }
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return resultString;
        }
    
        public static String doPost(String url) {
            return doPost(url, null);
        }
    
        /**
         * 请求的参数类型为json
         * @param url
         * @param json
         * @return
         * {username:"",pass:""}
         */
        public static String doPostJson(String url, String json) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建请求内容
                StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
                httpPost.setEntity(entity);
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return resultString;
        }
    
    }
    复制代码

    7.3封装调用接口

    package com.baidu.ai.api;
    
    import com.baidu.ai.api.pojo.CheckTextResult;
    import com.baidu.ai.api.pojo.Pass;
    import com.baidu.ai.api.pojo.Result;
    import com.utis.HttpUtil;
    import net.sf.json.JSONObject;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @作者: tjx
     * @描述: 文本审核API
     * @创建时间: 创建于17:19 2018/9/7
     **/
    public class CheckTextAPI {
    
        private static final String URL = "https://aip.baidubce.com/rest/2.0/antispam/v2/spam";
    
        /**
         * @param content 需要审核的文本
         *
         * @return true 通过 false 失败
         */
        public boolean check(String content){
    
            //获取access_token
            String access_token = AuthService.getAuth();
            Map<String,String> parameters = new HashMap<>();
            //添加调用参数
            parameters.put("access_token",access_token);
            parameters.put("content",content);
            //调用文本审核接口
            String result = HttpUtil.doPost(URL, parameters);
    
            // JSON转换
            JSONObject jsonObj = JSONObject.fromObject(result);
            Map<String, Class> classMap = new HashMap<String, Class>();
            classMap.put("result",Result.class);
            classMap.put("pass",Pass.class);
            classMap.put("bass",CheckTextResult.class);
            CheckTextResult bean = (CheckTextResult)JSONObject.toBean(jsonObj, CheckTextResult.class, classMap);
            //根据API返回内容处理业务逻辑 (这里简单模拟,)
            if(bean.getResult().getReject().size() + bean.getResult().getReview().size() > 0){
                return false;
            }
            return true;
        }
    
        public static void main(String[] args) {
            System.out.println( new CheckTextAPI().check("你好"));
        }
    }
    复制代码

    结果

    市面上的大部分API服务商的接入方式都是这样的。


    展开全文
  • 以网易邮箱注册为例,可以读取变填充表单数据,这是第三方网页,用最好java相关知识怎么做到,其他语言也可以,![图片说明](https://img-ask.csdn.net/upload/201509/05/1441450701_115581.png)
  • 网上javaMail邮箱推送代码太多,大都是有缺陷的,今天做项目刚好要用到,于是发了大半天的时间解决的这个问题。 jar包:javax.mail.jar 代码: 1 import java.io.IOException; 2 import java.security....
  • java中实现邮箱验证

    2019-06-24 20:58:54
    java中,我们可以同过一些第三方的组件进行完成一些指定的特色操作,比如短信验证啊,邮箱验证子类的 这里我们进行一个邮箱的验证,短信验证可以去我的其他帖子中进行一个查找,有代码书写 在实现email的邮箱验证...
  • java邮箱验证Email发送

    2014-05-16 17:16:07
    邮箱验证时要用到的Email发送,向第三方邮箱发送请求让其给目的邮箱发送一封邮件
  • import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; ...
  • Android不调用第三方程序发送邮件

    千次阅读 2016-01-06 09:58:50
    android平台发送邮件有两种方式,第一种调用第三方程序如Foxmail、网易邮箱大师等。第二种可以不调用任何程序,使用javax扩展包实现后台静默发送邮件。下面的代码实现了后台静默发送邮件的功能。完整的demo两种方法...
  • 邮箱使用的两种协议 1.POP/SMTP协议 POP/SMTP协议是所有邮箱都支持的协议,无论你是126邮箱、qq...Exchange账户是邮箱的默认协议,他的优点在于他无需配置,我们可以使用微软提供的第三方jar包:[ews-java-api](htt...
  • 1.我使用的是QQ邮箱作为第三方邮件服务器,使用的发送方式是smtp,先开启QQ邮箱的smtp功能即可; 话不多说,下面直接上代码: package cn.glor.flow.websocket.controller; import javax.mail.Session; import ...
  • paypal第三方支付总结

    2007-08-31 12:48:00
    这段时间写paypal这方面的接口,现总结如下:java有两种方式,一种是nvp,另一种是soap,那么做开发的步骤: 1:先到developer.paypal.com/注册一个开发账号,然后再以这个开发账号,创建www.sandbox.paypal.com/随意...
  • 首先要在QQ邮箱设置一下 ,获取到第三方登录的密码 //使用到的jar包 import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSenderImpl; import java.ut...
  • 实习期间给公司做的第一个小工具,只需下载jxl.jar和mail.jar的第三方那个类库,就可以着手敲代码了: 1、此次是使用POP3协议登录的邮箱,使用了手机获取的账号配置码 2、遍历收件箱的所有邮件,判断邮件类型,...
  • 刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习。 -----------------------------第一步开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 SMTP 服务 ...即下载第三方库 https://...
  • java隐藏手机号中间四位和隐藏邮箱

    千次阅读 2018-12-21 16:30:33
    在最近的项目中使用到了该功能,去年实现该功能的时候使用了第三方,或者sql查询的时候可以把结果替换,但是做的时候特别的繁琐麻烦,接下来给大家推荐使用正则的方式实现(特么的简单)   1、电话号码隐藏(134*...
  • 有没有那还种第三方邮箱验证的资源,就像CSDN注册的那样,在邮箱中点击邮件内的链接完成注册?
  •  有了邮箱账号我们要做的就是去开启邮箱第三方登录功能。在我们登陆了邮箱之后,我们要按照下图中的步骤去操作开启第三方登陆的功能。  所有的有关SMTP相关的服务都打开,这里会设置一个秘钥,类似于第三...
  • Java发送邮件备份

    2016-10-17 14:51:27
    近些年来部分邮箱发送邮件搞了个授权码,这里的授权码就是第三方发送邮件时使用的密码(需要注意) 发送邮件需要开启smtp QQ邮箱目前没有搞授权码,所以可以直接发送成功 网易邮箱(163/126)都要授权码 发送邮件...
  • java mail使用

    2019-09-27 09:14:58
    java mail 使用 配置文件 使用的springboot框架,配置文件为application.yml mail: ... username: XXXXX@163.com #邮箱登录账号 ... oauthCode: xxxxx #邮箱第三方登录授权码,可在对应邮箱官网获取(163的在ma...
  • Java发送邮件

    2019-01-10 14:10:17
    一、 博客背景 当我们需要做邮箱验证的时候,则...我们java发送邮件的原理就是用第三方发送,那么发件箱就需要有POP3/SMTP服务。在我们的QQ邮箱设置账户这里开启 注意:这里开启了pop3/smtp服务会有一个服务密...
  • Java 发送163邮件

    千次阅读 热门讨论 2019-03-26 20:10:15
      开启自己账号的163邮箱协议和授权码,授权码和登录邮箱账号的密码不是同一个,邮箱账号密码是登录邮箱的密码,授权码是第三方登录授权的密码,比如Foxmail或其它程序,像编写的Java程序也是第三方。 我这里已经...
  • 2、用于与3系统进行数据格式校验,因为3的系统不一定给你的数据,就是符合你要求的数据 3、用于从数据库中匹配符合格式的数据 二:正则表达式的作用 它可以帮我们处理一些比较复杂的文本数据,正则表达式,...
  • 有时候系统数据库需要保存特定的密码,例如邮箱密码发送邮件时要用到,有些会保存到配置文件,但是如果密码一个月改一次,每次重启程序太麻烦了,那保存到数据库,用明文的话(就算第三方已经用加密的密码key)那不太...
  • Java实现找回密码

    千次阅读 2019-04-02 10:19:05
    Java实现找回密码需要三步 1需要创建sendEmail.java (需要的QQ:2045781821) 部分设置也会详细在里面 ...这样就可以同步到第三方系统 注意发送成功之后如果提醒,邮箱没有收到提醒,可能是被当做垃圾邮箱,可在垃圾...
  • java发送邮件

    2017-12-04 10:42:21
    使用java发送简单邮件,以下发送邮件使用的服务是第三方腾讯企业邮箱服务, 也可以自己搭建服务器,当然是否需要搭建自己的服务器需要根据公司业务决定, 后续将介绍如何在服务器搭建自己的邮件服务器 ~ -- ...
  • Java 实现邮件发送

    2018-09-04 17:12:47
    需要在邮箱设置中设置允许第三方客户端登录 授权码设置,授权码为代码中登录邮箱密码,不是原来登录邮箱密码(此处需要注意) 前提准备 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 ...
  • 使用java实现email验证

    2020-10-11 20:57:21
    使用第三方mail jar包,实现邮件发送、进行邮件验证功能,根据邮箱进行密码找回

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

java第三方邮箱

java 订阅