J'ai cherché longtemps mais je n'ai pas trouvé de solution pertinente.Comment envoyer des messages Outlook par javascript SDK?
Lorsque j'envoie un message via l'API Microsoft Graph pour obtenir 403
, je ne sais pas où le problème est
{
statusCode: 403,
code: "ErrorAccessDenied",
message: "Access is denied. Check credentials and try again."
}
code:
makeSilentTokenRequest
//The static key authentication request
function makeSilentTokenRequest(callback) {
// Build up a hidden iframe
var iframe = $('<iframe/>');
iframe.attr('id', 'auth-iframe');
iframe.attr('name', 'auth-iframe');
iframe.appendTo('body');
iframe.hide();
iframe.load(function() {
callback(localStorage.accessToken);
});
iframe.attr('src', buildAuthUrl() + '&prompt=none&domain_hint=' +
localStorage.userDomainType + '&login_hint=' +
localStorage.userSigninName);
}
getAccessToken
//Verify refresh token function
function getAccessToken(callback) {
var now = new Date().getTime();
var isExpired = now > parseInt(localStorage.tokenExpires);
// Do we have a token already?
if (localStorage.accessToken && !isExpired) {
// Just return what we have
if (callback) {
callback(localStorage.accessToken);
}
} else {
// Attempt to do a hidden iframe request
makeSilentTokenRequest(callback);
}
}
getUserEmailAddress
function getUserEmailAddress(callback) {
//I saved it in localStorage
if (localStorage.userEmail) {
return localStorage.userEmail;
} else {
//getAccessToken
getAccessToken(function (accessToken) {
if (accessToken) {
// Create a Graph client
var client = MicrosoftGraph.Client.init({
authProvider: (done) => {
// Just return the token
done(null, accessToken);
}
});
// Get the Graph /Me endpoint to get user email address
client
.api('/me')
.get((err, res) => {
if (err) {
callback(null, err);
} else {
callback(res.mail);
}
});
} else {
var error = {
responseText: 'Could not retrieve access token'
};
callback(null, error);
}
});
}
}
sendMail
//sendMail
function sendMail(message) {
getUserEmailAddress(function (userEmail, error) {
if (error) {
renderError('getUserEmailAddress failed', error.responseText);
} else {
getAccessToken(function (accessToken) {
if (accessToken) {
// Create a Graph client
var client = MicrosoftGraph.Client.init({
authProvider: (done) => {
// Just return the token
done(null, accessToken);
}
});
client
.api('/me/sendMail')
.header('Authorization', 'Bearer ' + accessToken)
.header('Content-Type', "application/json")
.post(message, (err, res) => {
if (err) {
console.log(err);
//callback(null, err);
} else {
console.log(res);
//callback(res.value);
}
});
} else {
var error = {
responseText: 'Could not retrieve access token'
};
//callback(null, error);
}
});
}
})
}
CreateMail
function createMail(message,callback){
getUserEmailAddress(function(userEmail, error) {
if (error) {
renderError('getUserEmailAddress failed', error.responseText);
} else {
getAccessToken(function(accessToken) {
if (accessToken) {
// Create a Graph client
var client = MicrosoftGraph.Client.init({
authProvider: (done) => {
// Just return the token
done(null, accessToken);
}
});
client
.api('/me/messages')
.header('Authorization', 'Bearer ' +accessToken)
.header('Content-Type', "application/json")
.post(message,(err, res) => {
if (err) {
callback(res);
console.log("创建失败!");
} else {
callback(res);
console.log("创建成功!");
}
});
} else {
var error = { responseText: 'Could not retrieve access token' };
//callback(null, error);
}
});
}
})
}
Merci d'avance, j'ai mis la méthode d'utilisation dans le problème.J'utilise le moyen de Microsoft pour accéder à 'accessToken', et je peux obtenir la liste de diffusion normalement, mais il y a un problème lors de l'envoi de courrier. Quel est le point spécial sur lequel je dois faire attention? – ronger
Nous avons donc pas mal de "Microsoft Ways" pour obtenir un accessToken. Il existe plusieurs points de terminaison (v1.0 vs v2.0) et plusieurs flux OAUTH ('authorization_code',' implicit', 'client_credentials'), sans parler de plusieurs API avec leur propre ensemble de portée (API Microsoft Graph, API Azure Graph, Exchange Web Services, API Yammer, etc., etc.). Comprendre exactement comment vous obtenez le jeton me dira pourquoi il est rejeté dans ce cas. –
Merci, je ne pense pas que je l'ai fait savoir, j'utilise le [Microsoft Graph API] (https://developer.microsoft.com/fr-fr/graph/docs/api-reference/v1.0/api/user_sendmail) – ronger