Problem z wysyłaniem @ synapse-gmail

Problem z wysyłaniem @ synapse-gmail
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Witam próbuje wysłać @ poprzez synapse ,
kompilacja przebiega bez problemu jednak program wypluwa błąd, próbowałem zmieniać port jednak bez rezultatu,
jakieś rady.

Kopiuj
 procedure TUstawienia.WyslijMaila;

var
  EMail: TSMTPSend;
  TrescMaila: TStrings;
  Msg: TMimeMess;
  MimePart: TMimePart;
  tmpStr: UTF8String;
begin
  TrescMaila:= TStringList.Create;
  TrescMaila.Add('Treść maila.test');


  Msg:= TMimeMess.Create;
  Msg.Header.From:= '"NADAWCA MAILA"<homecontroll@gmail.com>';
  Msg.Header.ToList.Add('odbiorca@serwer.com');
  tmpStr:= 'Test';
  Msg.Header.Subject:= tmpStr;
  Msg.Header.XMailer:= 'homecontroll@gmail.com';
  Msg.AddPartHTML(TrescMaila,nil);
  Msg.EncodeMessage;


  EMail:= TSMTPSend.Create;
  EMail.UserName:= 'homecontroll@gmail.com';
  EMail.Password:=  'Haslo do konta nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '465';
  EMail.AutoTLS:= True;


  if EMail.Login then
    begin
      if EMail.AuthDone then
      begin
        EMail.MailFrom('homecontroll@gmail.com', Length('homecontroll@gmail.com'));
        EMail.MailTo('odbiorca@gmail.com');
        Application.ProcessMessages;
        if EMail.MailData(Msg.Lines) then
          EMail.Logout;
      end
    else
      begin
        ShowMessage('Błąd podczas wysyłki maila.');
        EMail.Free;
        TrescMaila.Free;
        Msg.Free;
        Exit;
      end;
    end
  else
    begin
      ShowMessage('Błąd podczas wysyłki maila.2');
      EMail.Free;
      TrescMaila.Free;
      Msg.Free;
      Exit;
    end;
  ShowMessage('Mail wysłany pomyślnie.');
  EMail.Free;
  TrescMaila.Free;
  Msg.Free;
end;

------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
edytowany 1x, ostatnio: tayamoto
0

jednak program wypluwa błąd

A może byś był łaskawy i podał nazwę błędu?

tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

wypluwa blad podany w kodzie 'Błąd podczas wysyłki maila.2'


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Ale poniższy fragment kodu zawiera dane poczty wychodzącej wiec dane POP raczej nie wiele tu dadzą. Chyba ze się mylę.

Kopiuj
 
  EMail:= TSMTPSend.Create;
  EMail.UserName:= 'homecontroll@gmail.com';
  EMail.Password:=  'Haslo do konta nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '465';
  EMail.AutoTLS:= True;

------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
0

Racja. Mój błąd :P .

Zobacz sobie (jeżeli jeszcze nie patrzyłeś)
http://support.google.com/mail/bin/answer.py?hl=pl&answer=13287
http://www.synapse.ararat.cz/doku.php/public:howto:smtpsend

poza tym, ja bym sobie zajrzał debuggerem do środka synapse i zobaczył czy na uwierzytelnieniu się wywala czy na połaczeniu czy na czymś innym jeszcze.

tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Próbowałem juz zmieniać SSL na TSL a co za tym idzie również port wychodzący z debugiem jeszcze się nie bawiłem, ale faktycznie spróbuje.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
0

Jeszcze zapomniałem powiedzieć że synapse ma jakąś opcję wyrzucania błędów jako wyjątków i jakieś procedury zwracające ostatni błąd. Ja bym je zapytał co się stało.

tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Bulid programu wykazuje błąd w procedurze , procedure TBlockSocket' biblioteki 'blckscok', skonczyły mi się pomysły.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
edytowany 2x, ostatnio: tayamoto
0

Bulid programu wykazuje błąd w procedurze , procedure TBlockSocket' biblioteki 'blckscok', skonczyły mi się pomysły.

Czy ty wiesz że TBlockSocket to klasa a nie procedura? poza tym: Blcksock. I jaki build???

Kolego, zobacz jaki jest błąd po loginie, tam powinno być coś ciekawego. Albo ustaw sobie rzucanie wyjątków a potem sobie go wyśtwietl. Bo teraz gadasz jakieś głupoty których nie jestem w stanie zrozumieć. Mów po polsku.

tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Prześledziłem procedurę przez Trace Intro i całość zaczyna się zapętlać przy

,function GetIconvIDFromCP(Value: TMimeChar): AnsiString;' (synachar)

Na tym kod staje.

z Delphi bawię się od 3mcy, i jest moim pierwszym językiem wiec proszę o wyrozumiałość.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
0

Trace Intro

Trace into? Widać twoja znajomość angielskiego taka jaka delphi... >.>

Mówiłeś że wyskakuje błąd a nie że się zawiesza więc naucz się używać debuggera.

poza tym, mówiłem żebyś użył mechanizmu lasterror i wyjątków, nie możesz tego zrobić? To jest prostsze niż debugger i będzie zapewne wystarczyć.

tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Myślę ze ironia jest zbędna, nikt z nas nie urodził się z umiejętnością programowania, prawda. Każdy popełnia błędy nawet najbardziej banalne (pop/smtp) ;p.
Tak jak napisałem post wyżej dopiero zaczynam naukę programowania i będę niezwykle wdzięczny, za wskazanie jak użyć "mechanizmu lasterror" (ewentualnie przykładowy kod wykorzystujący lasterror w synapse, w google niewiele jest na ten temat). Z góry bardzo dziękuję.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
1

Myślę ze ironia jest zbędna, nikt z nas nie urodził się z umiejętnością programowania, prawda. Każdy popełnia błędy nawet najbardziej banalne (pop/smtp) ;p.

Cóż, trochę racji masz :-] . Ale to nie był pierwszy raz gdy pomyliłeś się przy 'przepisywaniu'. A czasami jedna literka robi ogromną różnicę, więc jednak polecałbym trzymania się nazewnictwa (w końcu po coś schowek jest :P ).

Tak jak napisałem post wyżej dopiero zaczynam naukę programowania i będę niezwykle wdzięczny, za wskazanie jak użyć "mechanizmu lasterror" (ewentualnie przykładowy kod wykorzystujący lasterror w synapse, w google niewiele jest na ten temat). Z góry bardzo dziękuję.

Ze w google nie ma to nie uwierzę, ale możliwe że nie umiesz znaleźć (bo ciężko szukać czegoś o czym bardzo mało się wie).
Więc oto jak znalazłem o tym informację:
1.Wszedłem na moją ulubioną wyszukiwarkę
2.Wpisałem sobie 'synapse'
3.Znalazłem to: http://www.ararat.cz/synapse/doku.php/start (strona domowa synapse)
4.Przeszedłem do reference guide
5.'Classes, Interfaces, Objects and Records'
6.Ctrl+F i wpisałem SMTP. Kliknełem na obiekt
7.Przejrzałem sobie wartości i znalazłemm ResultCode i ResultString
8.Kliknełem sobie oba i zobaczyłem co o tym jest napisane
9.I już wiadomo gdzie synapse sobie zapisuje informacje o wyniku ostatniej operacji.
Więc w swój kod możesz wklepać że jeżeli nie uda się login to:

Kopiuj
writeln('oho! nie dziala login. Wynik: ',smtp.ResultString);

Albo jeżeli jesteś pr0.haxor

Kopiuj
raise exception.Create('Oho! Nie dziala login. Wynik: '+smtp.ResultString);

i to jest ten cały mechanizm lasterror. Proste!

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
1

gmail do wysyłki dla TLS używa portu 587 a nie 465 ale to przecież wiesz bo pierwsze co zrobiłeś to sprawdziłeś czy masz dobre porty powpisywane http://support.google.com/mail/bin/answer.py?hl=pl&answer=13287

dodałeś też do uses ssl_cryptlib i masz w systemie/w katalogu z exe plik cl32.dll

BTW http://4programmers.net/Forum/Delphi_Pascal/123403-Delphi_Synapse_-gt_HTTPSend_-gt_ProgressBar


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Mam cl32.dll w folderze projektu w uses ssl_cryptlib jednak niewiele to dało nadal taki sam rezultat, port ustawiam na 465 czyli SSL. Jeśli chodzi o podany przez kolegę Miska link to kod mega rozbudowany, mi zależy na wysyłce @ w kilku określonych przypadkach a na sama treść ma być generowana z poziomu kodu (bez editow itp.). Wiec na ta chwile pozostaje lasterror, możne to coś wyjaśni.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
olesio
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Szczecin
  • Postów:4191
1

@tayamoto: Przenalizuj sobie kod dołaczony do tego posta. Przed chwilą sprawdzłęm. Działa z gmailem. Wysłałem sobie testowy e-mail na inne konto z którego korzystam na o2.pl, jednak wiadomo zawsze tam będzie to lądowało w spamie, nie dochodziłem jak to zmienić. Ważne abyś miał te dwie dllki do korzystania z SSL, które dołaczyłem, jak i dołaczony do sekcji uses moduł o nazwie ssl_openssl. To będzie potrzebne do googla, o ile się nie mylę. Natomaist ustawienia dla gmaila w moim programie powinny być następujące:

Kopiuj
Adres serwera SMTP: smtp.gmail.com
Port: 587
Nazwa użytkownika: user@gmail.com
Nadawca: koniecznie coś wpisz
Adres nadawcy: tensamusercoemail@gmail.com (dla gmaila jest to o ile pamiętam koniecznie, bo inaczej nie wyśle

Pozdrawiam.
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Ok zataszczyło niestety nie mam już siły na walkę z gmailem wiec wysyłka odbywa się przez inny serwer pocztowy z portem 25, i na razie przez wzgląd na moje nerwy :) niech tak zostanie.
Dziękuje Wam za wszystkie porady i zainteresowanie tematem.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Witam
Postanowiłem ponownie podejść do nieszczęsnego Gmaila i znów lipa. Prześledziłem już chyba wszystkie tematy o wysyłaniu maili w synapse. Niby wszystko wygląda ok, odczytałem kody kolegi olesia oraz klasę Miskad mechanizm wygląda podobnie wiec dlaczego to nie wysyła. Zaznaczę tylko ze jeśli zmienię dane na serwer pocztowy z portem 25 wszystko działa rewelacyjnie. Poniżej dodaje kod całej formy, oczywiście folder projektu zawiera dll. o których mowa we wcześniejszych postach. Czy ktoś ma jakieś pomysły, tylko proszę nie odsyłajcie mnie do googla cały dzień tam szukam.

Kopiuj
 

unit Unit6;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SMTPSend, MIMEPart, MIMEMess, ExtCtrls;

type
  TKomunikacja = class(TForm)
    
    Button2: TButton;
    CheckBox3: TCheckBox;
    procedure WyslijMaila;
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Komunikacja: TKomunikacja;

implementation

uses Unit3, ssl_openssl;

{$R *.dfm}

procedure TKomunikacja.Button2Click(Sender: TObject);
begin
 WyslijMaila;
end;

procedure TKomunikacja.WyslijMaila;
var
  EMail: TSMTPSend;
  TrescMaila: TStrings;
  Msg: TMimeMess;
  MimePart: TMimePart;
  tmpStr: UTF8String;
 begin
  TrescMaila:= TStringList.Create;
  TrescMaila.Add('TreϾ maila.test');
 

  Msg:= TMimeMess.Create;
  Msg.Header.From:= 'nadawca@gmail.com';
  Msg.Header.ToList.Add('odbiorca@gmail.com');
  tmpStr:= 'Test';
  Msg.Header.Subject:= tmpStr;
  Msg.Header.XMailer:= 'nadawca@gmail.com';
  Msg.AddPartHTML(TrescMaila,nil);
  Msg.EncodeMessage;
 
 
  EMail:= TSMTPSend.Create;
  EMail.UserName:= 'nadawca@gmail.com';
  EMail.Password:=  'haslo_nadawcy';
  EMail.TargetHost:= 'smtp.gmail.com';
  EMail.TargetPort:= '587';
  EMail.AutoTLS:= True;

  if EMail.Login then
    begin
      if EMail.AuthDone then
      begin
        EMail.MailFrom('nadawca@gmail.com', Length('nadawca@gmail.com'));
        EMail.MailTo('odbiorca@gmail.com');
        Application.ProcessMessages;
        if EMail.MailData(Msg.Lines) then
          EMail.Logout;
      end
    else
      begin
        ShowMessage('B³¹d podczas wysy³ki maila.');
        EMail.Free;
        TrescMaila.Free;
        Msg.Free;
        Exit;
      end;
    end
  else
    begin
      ShowMessage('B³¹d podczas wysy³ki maila');
      EMail.Free;
      TrescMaila.Free;
      Msg.Free;
      Exit;
    end;
  ShowMessage('Mail wys³any pomyœlnie.');
  EMail.Free;
  TrescMaila.Free;
  Msg.Free;
 end;


end.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

i sprawdziłeś debuggerem dlaczego nie wysyła...


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Tak puściłem to debugerem i całość zatrzymuje się na:

EMail.Login

Ale.. sprawdziłem jakie wartości przyjmują poszczególne stale i.

EMail.TargetHost:= 'smtp.gmail.com'; przyjmuje wartość 127.0.0.1
EMail.TargetPort:= '587'; przyjmuje wartość '25'

Dlaczego u mnie jest '25' a debugujac kod kolegi Olesia jest wartosc '587' wtf


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
edytowany 1x, ostatnio: tayamoto
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

i nie wpadłeś na to, żeby na tej linijce wcisnąć F7 i zobaczyć na czym naprawdę się zatrzymuje i z jakim błędem. BTW na 99% będzie to brak obsługi SSLa (brak bibliotek albo ich niezgodność)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Biblioteki dll. mam z projektu Olesia czyli oba pliki v9.8.4
natomiast cala procedura nie wraca z

if ReadResult <> 220 then

Potem zaczyna skakać po rożnej maści klasach.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
edytowany 1x, ostatnio: tayamoto
Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0
tayamoto napisał(a)

if ReadResult <> 220 then

a ReadResult wynosi............

Potem zaczyna skakać po rożnej maści klasach.

i to jest problem poskakać za nią i zobaczyć gdzie i na czym DOKŁADNIE się wywala


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Hey
Problem rozwiązany..nie pytajcie gdzie tkwił (okazało się ze był banalny). teraz usiłuję ogarnąć odbieranie maili, główny kod to przerobiony kod wujka miska :) ze strony:

http://4programmers.net/Forum/Newbie/181519-webbrowser_-_pobieranie_plikow

Docelowo program ma się łączyć ze skrzynka np co 5 minut, sprawdzać adresy nadawców jeśli adres jest zgodny z wzorcem to odczytywać zawartość maila dekodować i pobierać ja do Edita, memo. W chwili obecnej udaje mi się zalogować na skrzynkę ale nie mam pojęcia jak zrobić pozostałe dwie operacje.
Czy mogę prosić o wskazanie jakiegoś dobrego rozwiązania. Ewentualnie jakiegoś przykładowego kodu który pobiera zdekodowana wiadomość do fizycznego komponentu.
Wiem ze pytanie jest nowe ale nie chce zaśmiecać forum nowymi (być możne banalnymi) tematami.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)