Я спросил Близнецов, как сделать то, что говорится в названии этого вопроса, используя сценарий приложений. (Я отзывом использовать плагины, так как они обычно поставляются с ограниченной бесплатной пробной версией и стоимостью, поэтому здесь не принимаются такие решения, если здесь не предлагается доверенный бесплатный плагин). Это дало мне решение Apps-Script (для развертывания в форме Google), которое, как утверждается, делает следующее: < /p>
Он принимает идентификатор электронной почты ответчика и позволяет ответчику отправлять один раз с Пустое поле OTP (не установлено по мере необходимости), а затем отправка запускает генерацию и отправку OTP на идентификатор электронной почты, заполненный в поле. Ответчик затем должен отредактировать ответ (идентификатор электронной почты в любом случае будет предварительно заполнен) и заполнить OTP и отправить снова, и скрипт проверяет, что ответчик старается, пока он не будет записан правильно. < /P>
Однако сценарий и триггеры вместе не могли сделать вышеупомянутое даже после того, как я попытался повторить модификации с помощью Близнецов и следовал его инструкциям к Tee. < /p>
Я мог допустить незначительные ошибки, и, возможно, также мое фундаментальное понимание триггеров, возможно, не хватало. Я мог бы использовать дополнительную пару глаз, чтобы проверить и найти ошибки, а также указывать фундаментальные недостатки и исправить эту проблему. < /P>
ниже приведены некоторые важные детали. Пожалуйста, попросите дополнительную информацию по мере необходимости, и я посмотрю, смогу ли я предоставить. развернуто: < /p>
function onSubmit(e) {
Logger.log("onSubmit triggered");
var itemResponses = e.response.getItemResponses();
var emailItem = itemResponses.find(item => item.getItem().getTitle() == "Your Email
Address"); // Replace with your email question title
if (!emailItem) {
Logger.log("ERROR: Email question NOT found!");
itemResponses.forEach(itemResponse => Logger.log("Item Title: " +
itemResponse.getItem().getTitle()));
return;
}
var email = emailItem.getResponse();
Logger.log("Email: " + email);
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
Logger.log("ERROR: Invalid email address: " + email);
e.response.withItemResponses().setConfirmationMessage("Invalid email address.
Please enter a valid email.");
return;
}
// Get the edit URL
var editUrl = e.response.getEditResponseUrl();
Logger.log("Edit URL: " + editUrl);
var cache = CacheService.getScriptCache();
cache.put("pending_email", email, 300); // Store email for 5 minutes
cache.put("edit_url", editUrl, 300); // Store edit URL
// Generate and send OTP
var otp = generateOTP();
cache.put(email + "_otp", otp, 300); // Store OTP for 5 minutes
sendEmail(email, otp, editUrl); // Send email with OTP and edit URL
// Instead of setEditResponse, use a confirmation message to prompt for OTP entry
e.response.withItemResponses().setConfirmationMessage("Thank you for submitting your
email. Please check your inbox (and spam folder) for the OTP. Click the link in the
email to complete your submission.");
return;
}
function onFormSubmit(e) {
Logger.log("onFormSubmit triggered");
var itemResponses = e.response.getItemResponses();
var emailItem = itemResponses.find(item => item.getItem().getTitle() == "Your Email
Address"); // Replace with your email question title
var email = emailItem.getResponse();
var otpQuestion = itemResponses.find(item => item.getItem().getTitle() == "OTP"); //
Replace with your OTP question title
var submittedOtp = otpQuestion ? otpQuestion.getResponse() : null;
var cache = CacheService.getScriptCache();
var cachedOtp = cache.get(email + "_otp");
if (submittedOtp && cachedOtp && submittedOtp == cachedOtp) {
cache.put(email + "_verified", true, 3600);
e.response.withItemResponses().setConfirmationMessage("Your email has been
verified. Thank you for your submission!");
} else if (submittedOtp) {
e.response.withItemResponses().setConfirmationMessage("Incorrect OTP. Please try
again.");
} else {
e.response.withItemResponses().setConfirmationMessage("Please enter the OTP.");
}
}
function generateOTP() {
var otp = Math.floor(100000 + Math.random() * 900000); // 6-digit OTP
return otp.toString();
}
function sendEmail(email, otp, editUrl) { // Add editUrl parameter
var subject = "Your OTP for Google Form Verification";
var body = "Your OTP is: " + otp + "\n\nPlease click the following link to complete
your submission: " + editUrl; // Include editUrl
try {
MailApp.sendEmail(email, subject, body);
Logger.log("OTP email sent successfully to: " + email);
} catch (error) {
Logger.log("ERROR sending OTP email: " + error);
}
}
< /code>
ниже представлен скриншот двух набора триггеров.
... Наконец, ниже приведены журналы ошибок при выполнении триггеров:
Cloud logs
Feb 24, 2025, 3:22:24 PM Info onSubmit triggered
Feb 24, 2025, 3:22:24 PM Info Email: ahkkcr@hotmail.com
Feb 24, 2025, 3:22:25 PM Info Edit URL: https://docs.google.com/forms/d/e/1FAIp ... QauOy8iPHw
Feb 24, 2025, 3:22:25 PM Info OTP email sent successfully to: ahkkcr@hotmail.com
Feb 24, 2025, 3:22:25 PM Error TypeError: e.response.withItemResponses is not a function
at onSubmit(Code:39:14)
Cloud logs
Feb 24, 2025, 3:22:22 PM Info onFormSubmit triggered
Feb 24, 2025, 3:22:23 PM Error TypeError: e.response.withItemResponses is not a function
at onFormSubmit(Code:62:16)
Подробнее здесь: https://stackoverflow.com/questions/794 ... pps-script
Электронная почта сценария приложений генерации OTP ⇐ Javascript
Форум по Javascript
-
Anonymous
1740463633
Anonymous
Я спросил Близнецов, как сделать то, что говорится в названии этого вопроса, используя сценарий приложений. (Я отзывом использовать плагины, так как они обычно поставляются с ограниченной бесплатной пробной версией и стоимостью, поэтому здесь не принимаются такие решения, если здесь не предлагается доверенный бесплатный плагин). Это дало мне решение Apps-Script (для развертывания в форме Google), которое, как утверждается, делает следующее: < /p>
Он принимает идентификатор электронной почты ответчика и позволяет ответчику отправлять один раз с Пустое поле OTP (не установлено по мере необходимости), а затем отправка запускает генерацию и отправку OTP на идентификатор электронной почты, заполненный в поле. Ответчик затем должен отредактировать ответ (идентификатор электронной почты в любом случае будет предварительно заполнен) и заполнить OTP и отправить снова, и скрипт проверяет, что ответчик старается, пока он не будет записан правильно. < /P>
Однако сценарий и триггеры вместе не могли сделать вышеупомянутое даже после того, как я попытался повторить модификации с помощью Близнецов и следовал его инструкциям к Tee. < /p>
Я мог допустить незначительные ошибки, и, возможно, также мое фундаментальное понимание триггеров, возможно, не хватало. Я мог бы использовать дополнительную пару глаз, чтобы проверить и найти ошибки, а также указывать фундаментальные недостатки и исправить эту проблему. < /P>
ниже приведены некоторые важные детали. Пожалуйста, попросите дополнительную информацию по мере необходимости, и я посмотрю, смогу ли я предоставить. развернуто: < /p>
function onSubmit(e) {
Logger.log("onSubmit triggered");
var itemResponses = e.response.getItemResponses();
var emailItem = itemResponses.find(item => item.getItem().getTitle() == "Your Email
Address"); // Replace with your email question title
if (!emailItem) {
Logger.log("ERROR: Email question NOT found!");
itemResponses.forEach(itemResponse => Logger.log("Item Title: " +
itemResponse.getItem().getTitle()));
return;
}
var email = emailItem.getResponse();
Logger.log("Email: " + email);
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
Logger.log("ERROR: Invalid email address: " + email);
e.response.withItemResponses().setConfirmationMessage("Invalid email address.
Please enter a valid email.");
return;
}
// Get the edit URL
var editUrl = e.response.getEditResponseUrl();
Logger.log("Edit URL: " + editUrl);
var cache = CacheService.getScriptCache();
cache.put("pending_email", email, 300); // Store email for 5 minutes
cache.put("edit_url", editUrl, 300); // Store edit URL
// Generate and send OTP
var otp = generateOTP();
cache.put(email + "_otp", otp, 300); // Store OTP for 5 minutes
sendEmail(email, otp, editUrl); // Send email with OTP and edit URL
// Instead of setEditResponse, use a confirmation message to prompt for OTP entry
e.response.withItemResponses().setConfirmationMessage("Thank you for submitting your
email. Please check your inbox (and spam folder) for the OTP. Click the link in the
email to complete your submission.");
return;
}
function onFormSubmit(e) {
Logger.log("onFormSubmit triggered");
var itemResponses = e.response.getItemResponses();
var emailItem = itemResponses.find(item => item.getItem().getTitle() == "Your Email
Address"); // Replace with your email question title
var email = emailItem.getResponse();
var otpQuestion = itemResponses.find(item => item.getItem().getTitle() == "OTP"); //
Replace with your OTP question title
var submittedOtp = otpQuestion ? otpQuestion.getResponse() : null;
var cache = CacheService.getScriptCache();
var cachedOtp = cache.get(email + "_otp");
if (submittedOtp && cachedOtp && submittedOtp == cachedOtp) {
cache.put(email + "_verified", true, 3600);
e.response.withItemResponses().setConfirmationMessage("Your email has been
verified. Thank you for your submission!");
} else if (submittedOtp) {
e.response.withItemResponses().setConfirmationMessage("Incorrect OTP. Please try
again.");
} else {
e.response.withItemResponses().setConfirmationMessage("Please enter the OTP.");
}
}
function generateOTP() {
var otp = Math.floor(100000 + Math.random() * 900000); // 6-digit OTP
return otp.toString();
}
function sendEmail(email, otp, editUrl) { // Add editUrl parameter
var subject = "Your OTP for Google Form Verification";
var body = "Your OTP is: " + otp + "\n\nPlease click the following link to complete
your submission: " + editUrl; // Include editUrl
try {
MailApp.sendEmail(email, subject, body);
Logger.log("OTP email sent successfully to: " + email);
} catch (error) {
Logger.log("ERROR sending OTP email: " + error);
}
}
< /code>
ниже представлен скриншот двух набора триггеров.
... Наконец, ниже приведены журналы ошибок при выполнении триггеров:
Cloud logs
Feb 24, 2025, 3:22:24 PM Info onSubmit triggered
Feb 24, 2025, 3:22:24 PM Info Email: ahkkcr@hotmail.com
Feb 24, 2025, 3:22:25 PM Info Edit URL: https://docs.google.com/forms/d/e/1FAIpQLSdtWPCzDm92Tah34gnj4UZHiZgQ22L6nQPxC5LrnwDCoUphsA/viewform?edit2=2_ABaOnud9q2OpMIXEeE6nvxwkIxPCr6JbP-5y9OQJoLoNKEN2va_vWQLR-nQZ8QauOy8iPHw
Feb 24, 2025, 3:22:25 PM Info OTP email sent successfully to: ahkkcr@hotmail.com
Feb 24, 2025, 3:22:25 PM Error TypeError: e.response.withItemResponses is not a function
at onSubmit(Code:39:14)
Cloud logs
Feb 24, 2025, 3:22:22 PM Info onFormSubmit triggered
Feb 24, 2025, 3:22:23 PM Error TypeError: e.response.withItemResponses is not a function
at onFormSubmit(Code:62:16)
Подробнее здесь: [url]https://stackoverflow.com/questions/79465549/email-otp-generation-apps-script[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия