我正在设置一个向客户端发送电子邮件的应用程序。我正在使用Java和SendGrid创建此应用,但是SendGrid授权存在问题
我遇到了错误:
java.io.IOException:请求返回状态代码401Body:{“错误”:[{“消息”:“所提供的授权授予无效,已过期或已撤销”,“字段”:空,“帮助”: null}]}
通读其他类似问题的文章,似乎大多数人都可以解决,因为人们使用的是API密钥ID而不是API密钥。我已经检查过以确保我使用的是完整密钥,所以我认为这不是问题。
我也曾尝试创建一个新的API密钥,但这只会带来相同的问题。最后,我尝试使用Postman进行类似的调用,并且使用相同的API密钥也可以正常工作。
这是我用来发送电子邮件的主要课程。
import com.sendgrid.*;
import com.sendgrid.helpers.mail.Mail;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.helpers.mail.objects.Email;
import java.io.IOException;
public class SendEmail {
public static void main(String[] args) throws IOException{
Email from = new Email("FROM_EMAIL");
String subject = "Sending with Twilio(?) is fun";
Email to = new Email("TO_EMAIL");
Content content = new Content("text/plain", "and easy to to anywhere, even with Java");
Mail mail = new Mail(from, subject, to, content);
SendGrid sg = new SendGrid(System.getenv("API_KEY"));
Request request = new Request();
try {
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
request.setBody(mail.build());
Response response = sg.api(request);
System.out.println(response.getStatusCode());
System.out.println(response.getBody());
System.out.println(response.getHeaders());
} catch (IOException ex) {
throw(ex);
}
}
然后我通过以下代码片段在我的主班上叫这个班:
try{
SendEmail.main(email);
} catch(IOException ex){
System.out.println(ex);
}
“ email”字符串只是一个占位符,否则我会收到一条错误消息,说我在调用类时需要一个数组。 (不知道为什么会这样,这可能是问题的根源吗?)
明显的敏感信息已被删除,这就是为什么某些字段无法显示的原因。
顺便说一下,我遵循了这个github中的教程:
https://github.com/sendgrid/sendgrid-java
让我知道您的想法。 预先感谢!
答案 0 :(得分:0)
抱歉。我不知道“ System.getenv”会得到环境变量。我设置了环境变量,问题就解决了。
答案 1 :(得分:0)
我认为您的环境变量设置不正确。尝试执行不带“ System.getenv”的程序,如下所示。
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char uint8_t;
uint8_t Schedules[24][8]={
{0,1,1,1,1,1,1,0},
{0,2,2,2,2,2,2,0},
{0,3,3,3,3,3,3,0},
{0,4,4,4,4,4,4,0},
{0,5,5,5,5,5,5,0},
{0,6,6,6,6,6,6,0},
{0,7,7,7,7,7,7,0},
{0,8,8,8,8,8,8,0},
{0,9,9,9,9,9,9,0},
{0,10,10,10,10,10,10,0},
{0,11,11,11,11,11,11,0},
{0,12,12,12,12,12,12,0},
{0,13,13,13,13,13,13,0},
{0,14,14,14,14,14,14,0},
{0,15,15,15,15,15,15,0},
{0,16,16,16,16,16,16,0},
{0,17,17,17,17,17,17,0},
{0,18,18,18,18,18,18,0},
{0,19,19,19,19,19,19,0},
{0,20,20,20,20,20,20,0},
{0,21,21,21,21,21,21,0},
{0,22,22,22,22,22,22,0},
{0,23,23,23,23,23,23,0},
{0,24,24,24,24,24,24,0}
};
int main(){
int this_hour,this_section,i;
uint8_t buff[192]={0};//24*8
for (this_hour=0;this_hour<24;this_hour++){
for(this_section=0;this_section<8;this_section++)
{
buff[this_hour*8+this_section]=Schedules[this_hour][this_section];
}
}
for(i=0;i<192;i++){
if(i!=0 && i%8==0){
printf("\n");
}
printf("%d",buff[i]);
}
printf("\n------------------------------------\n");
uint8_t buff2[219]={0};//24*9+1+2
for (this_hour=0;this_hour<24;this_hour++){
for(this_section=0;this_section<8;this_section++)
{
buff2[this_hour*9+this_section+2]=Schedules[this_hour][this_section];
}
}
for(i=0;i<219;i++){
if(i!=0 && i%9==0){
printf("\n");
}
printf("%d",buff2[i]);
}
return 0;
}