Gelen mailleri google sheetse aktarma

Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
Arkadaşlar google sheets ile mail göndermek mümkün. Peki gelen mailleri google sheetse script veya formül ile aktarmak mümkün mü ?
 

hüseyintok

Altın Üye
Katılım
11 Mart 2020
Mesajlar
74
Altın Üyelik Bitiş Tarihi
11-03-2025
google sheet de Apps Script’i Açın: Extensions > Apps Script menüsüne bu kodu yapıştırın. Run > Run function > getEmailsToSheet
ile çalıştırın.


function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = 1;

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
sheet.getRange(row, 4).setValue(message.getPlainBody());
row++;
});
});
}
 
Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
google sheet de Apps Script’i Açın: Extensions > Apps Script menüsüne bu kodu yapıştırın. Run > Run function > getEmailsToSheet
ile çalıştırın.


function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = 1;

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());
sheet.getRange(row, 4).setValue(message.getPlainBody());
row++;
});
});
}
Hüseyin Bey Merhaba
Teşekkür ederim. Script güzel çalıştı. Bir ricam daha olacak her yeni mail geldiğinde script otomatik çalışıp maili aktarsın . Ve mümkünse mail gövdesindeki bütün mesajı değil sadece ilk iki satırı yapıştırsın.
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
dener misiniz ? Yapay zeka ile oluşturuldu.


1-Script Güncellemesi
Aşağıdaki kodu Apps Script’te kullanabilirsiniz. Bu, yalnızca ilk iki satırı alacak ve her yeni e-posta geldiğinde çalışacak şekilde ayarlanmıştır.


function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

row++;
});
});
}

2. Tetikleyici Ayarlama
Otomatik çalışması için aşağıdaki adımları izleyerek bir tetikleyici ekleyin:
  1. Apps Script ekranında üstteki menüden "Triggers" (Tetikleyiciler) bölümüne gidin.
  2. Sağ altta "Add Trigger" (Tetikleyici Ekle) butonuna tıklayın.
  3. "Choose which function to run" (Çalıştırılacak fonksiyonu seçin) kısmında getEmailsToSheet fonksiyonunu seçin.
  4. "Select event source" (Olay kaynağını seçin) kısmında "Time-driven" (Zamanla çalışan) seçeneğini seçin.
  5. "Select type of time based trigger" (Zaman tabanlı tetikleyici türünü seçin) kısmında "Minutes timer" (Dakika zamanlayıcısı) seçin ve istediğiniz sıklığı (örneğin her 5 dakikada bir) ayarlayın.
  6. Tetikleyiciyi kaydedin.
Artık yeni e-postalar geldiğinde ve belirlediğiniz aralıklarla çalışıyor olmalıdır
 
Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
dener misiniz ? Yapay zeka ile oluşturuldu.


1-Script Güncellemesi
Aşağıdaki kodu Apps Script’te kullanabilirsiniz. Bu, yalnızca ilk iki satırı alacak ve her yeni e-posta geldiğinde çalışacak şekilde ayarlanmıştır.


function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

row++;
});
});
}

2. Tetikleyici Ayarlama
Otomatik çalışması için aşağıdaki adımları izleyerek bir tetikleyici ekleyin:
  1. Apps Script ekranında üstteki menüden "Triggers" (Tetikleyiciler) bölümüne gidin.
  2. Sağ altta "Add Trigger" (Tetikleyici Ekle) butonuna tıklayın.
  3. "Choose which function to run" (Çalıştırılacak fonksiyonu seçin) kısmında getEmailsToSheet fonksiyonunu seçin.
  4. "Select event source" (Olay kaynağını seçin) kısmında "Time-driven" (Zamanla çalışan) seçeneğini seçin.
  5. "Select type of time based trigger" (Zaman tabanlı tetikleyici türünü seçin) kısmında "Minutes timer" (Dakika zamanlayıcısı) seçin ve istediğiniz sıklığı (örneğin her 5 dakikada bir) ayarlayın.
  6. Tetikleyiciyi kaydedin.
Artık yeni e-postalar geldiğinde ve belirlediğiniz aralıklarla çalışıyor olmalıdır
Cem bey merhaba
kodu denedim . Yeni mail gelmese dahi 5 dakikada bir ilk maili (aynı maili) aktarıyor. Benim istediğim mail gelince yenisini aktarsın. Eğer gelen yeni mail yoksa aynı maileri tekrardan aktarmasın
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
tekrar dener misiniz ?


Aşağıdaki kod, yalnızca yeni gelen e-postaları aktarır:


var processedMessages = []; // Önceden işlenmiş e-postaları saklamak için dizi

function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
}

Açıklamalar:
  • processedMessages: Daha önce işlenmiş e-postaların kimliklerini saklamak için kullanılan bir dizi.
  • if (!processedMessages.includes(message.getId())): Eğer e-posta daha önce işlenmemişse, e-postayı aktarır ve kimliğini processedMessages dizisine ekler.
Bu şekilde, yalnızca yeni gelen e-postalar aktarılarak tekrarlanan aktarım önlenmiş olur.
Tetikleyici Ayarlama:
Zaten tetikleyici ayarladıysanız, bu kodu güncelleyip çalıştırabilirsiniz. Yeni e-posta geldiğinde yalnızca o e-posta aktarılacaktır.
 
Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
tekrar dener misiniz ?


Aşağıdaki kod, yalnızca yeni gelen e-postaları aktarır:


var processedMessages = []; // Önceden işlenmiş e-postaları saklamak için dizi

function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
}

Açıklamalar:
  • processedMessages: Daha önce işlenmiş e-postaların kimliklerini saklamak için kullanılan bir dizi.
  • if (!processedMessages.includes(message.getId())): Eğer e-posta daha önce işlenmemişse, e-postayı aktarır ve kimliğini processedMessages dizisine ekler.
Bu şekilde, yalnızca yeni gelen e-postalar aktarılarak tekrarlanan aktarım önlenmiş olur.
Tetikleyici Ayarlama:
Zaten tetikleyici ayarladıysanız, bu kodu güncelleyip çalıştırabilirsiniz. Yeni e-posta geldiğinde yalnızca o e-posta aktarılacaktır.
Cem bey bu kodları kullanınca hiç mail aktarmıyor.
Aşağıdaki hatayı verdi
15:43:54
Hata
ReferenceError: processedMessages is not defined
(anonim)
@ makrolar.gs:10
(anonim)
@ makrolar.gs:8
getEmailsToSheet
@ makrolar.gs:6
 
Son düzenleme:

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Güncellenmiş Kod
Aşağıda, processedMessages dizisini global olarak tanımlandı. Böylece fonksiyon her çalıştığında dizi sıfırlanmayacak ve önceki işlenmiş mesajları saklayabileceksiniz.


var processedMessages = []; // Önceden işlenmiş e-postaları saklamak için dizi

function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
}

Dikkat Edilmesi Gerekenler
  1. Global Değişken: processedMessages dizisini fonksiyon dışında tanımlamak, onun tüm fonksiyon çağrılarında erişilebilir olmasını sağlar.
  2. Uygulama Yeniden Başlatılması: Script’i yeniden çalıştırdığınızda veya Google Sheets'i kapatıp açtığınızda, processedMessages dizisi sıfırlanacaktır. Eğer kalıcı bir çözüm istiyorsanız, mesaj ID'lerini bir veri kaynağında (örneğin, Google Sheets içinde bir hücrede) saklamayı düşünebilirsiniz.
 
Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
Güncellenmiş Kod
Aşağıda, processedMessages dizisini global olarak tanımlandı. Böylece fonksiyon her çalıştığında dizi sıfırlanmayacak ve önceki işlenmiş mesajları saklayabileceksiniz.


var processedMessages = []; // Önceden işlenmiş e-postaları saklamak için dizi

function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});
}

Dikkat Edilmesi Gerekenler
  1. Global Değişken: processedMessages dizisini fonksiyon dışında tanımlamak, onun tüm fonksiyon çağrılarında erişilebilir olmasını sağlar.
  2. Uygulama Yeniden Başlatılması: Script’i yeniden çalıştırdığınızda veya Google Sheets'i kapatıp açtığınızda, processedMessages dizisi sıfırlanacaktır. Eğer kalıcı bir çözüm istiyorsanız, mesaj ID'lerini bir veri kaynağında (örneğin, Google Sheets içinde bir hücrede) saklamayı düşünebilirsiniz.
Cem bey aynı hata devam ediyor.
mesaj ID'lerin bir hücrede saklasın. Daha mantıklı
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

// İşlenmiş mesaj ID'lerini al
var processedMessages = sheet.getRange("B1").getValue();
if (processedMessages) {
processedMessages = processedMessages.split(","); // ID'leri diziye çevir
} else {
processedMessages = []; // Eğer hücre boşsa, boş dizi oluştur
}

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});

// İşlenmiş mesaj ID'lerini hücreye kaydet
sheet.getRange("B1").setValue(processedMessages.join(",")); // ID'leri virgülle birleştir
}

Açıklamalar
  1. İşlenmiş Mesajlar: B1 hücresinde saklanan işlenmiş mesaj ID'leri, processedMessages dizisine aktarılır.
  2. ID'leri Kontrol Etme: Her yeni mesaj işlendiğinde, ID'si kontrol edilir ve işlem yapılmadıysa veriler eklenir.
  3. Kaydetme: İşlenmiş mesaj ID'leri, B1 hücresine kaydedilir. Bu şekilde, script bir sonraki çalıştırıldığında hangi mesajların işlendiğini bilmiş olur.
Kullanım
  1. Yukarıdaki kodu Google Sheets Apps Script'e yapıştırın.
  2. Düğmeyi veya script’i çalıştırın. A sütununda e-posta bilgileri yazılacak ve B1 hücresinde işlenmiş mesaj ID'leri saklanacaktır.
Bu yöntemle, aynı mesajları tekrar tekrar işleme almaktan kaçınabilirsiniz.
 
Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
function getEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 10); // İlk 10 e-posta konusunu alır
var row = sheet.getLastRow() + 1; // Mevcut son satırın altına yazmaya başlar

// İşlenmiş mesaj ID'lerini al
var processedMessages = sheet.getRange("B1").getValue();
if (processedMessages) {
processedMessages = processedMessages.split(","); // ID'leri diziye çevir
} else {
processedMessages = []; // Eğer hücre boşsa, boş dizi oluştur
}

threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
// Eğer bu mesaj daha önce işlenmemişse
if (!processedMessages.includes(message.getId())) {
sheet.getRange(row, 1).setValue(message.getDate());
sheet.getRange(row, 2).setValue(message.getFrom());
sheet.getRange(row, 3).setValue(message.getSubject());

// Mail gövdesinden yalnızca ilk iki satırı al
var body = message.getPlainBody();
var firstTwoLines = body.split('\n').slice(0, 2).join('\n');
sheet.getRange(row, 4).setValue(firstTwoLines);

processedMessages.push(message.getId()); // Mesajı işlenmişler listesine ekle
row++;
}
});
});

// İşlenmiş mesaj ID'lerini hücreye kaydet
sheet.getRange("B1").setValue(processedMessages.join(",")); // ID'leri virgülle birleştir
}

Açıklamalar
  1. İşlenmiş Mesajlar: B1 hücresinde saklanan işlenmiş mesaj ID'leri, processedMessages dizisine aktarılır.
  2. ID'leri Kontrol Etme: Her yeni mesaj işlendiğinde, ID'si kontrol edilir ve işlem yapılmadıysa veriler eklenir.
  3. Kaydetme: İşlenmiş mesaj ID'leri, B1 hücresine kaydedilir. Bu şekilde, script bir sonraki çalıştırıldığında hangi mesajların işlendiğini bilmiş olur.
Kullanım
  1. Yukarıdaki kodu Google Sheets Apps Script'e yapıştırın.
  2. Düğmeyi veya script’i çalıştırın. A sütununda e-posta bilgileri yazılacak ve B1 hücresinde işlenmiş mesaj ID'leri saklanacaktır.
Bu yöntemle, aynı mesajları tekrar tekrar işleme almaktan kaçınabilirsiniz.
Cem Bey teşekkür ederim.
Kodlar sorunsuz çalıştı.
tetikleyiciyi dakikada bir yaptım. Scriptin her dakika çalışması bilgisayar için sorun yaratırmı
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,452
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
evet işlemci aşırı ısınabilir ve donmalar yapabilir. Fan da surekli calısır, bu yuzden 5 dk daha dogru olabilir.
Bu arada kolay calısmalar dilerim
 
Katılım
22 Haziran 2009
Mesajlar
165
Excel Vers. ve Dili
ofis 365
evet işlemci aşırı ısınabilir ve donmalar yapabilir. Fan da surekli calısır, bu yuzden 5 dk daha dogru olabilir.
Bu arada kolay calısmalar dilerim
Yardım ve bilgiler için Teşekkür ederim. Size de iyi çalışmalar.
 
Üst